Python 选择特定列

Python 选择特定列,python,pandas,selection,Python,Pandas,Selection,我有一个科学家的数据框 radius date spin atom 0 12,50 YYYY/MM 0 he 1 11,23 YYYY/MM 2 c 2 45,2 YYYY/MM 1 z 3 11,1 YYYY/MM 1 p 我想为每一行选择,半径差在下面的所有行,例如5 我定义了一个函数来计算simple,这是一个示例: def diff_

我有一个科学家的数据框

     radius      date     spin  atom
0    12,50       YYYY/MM   0     he
1    11,23       YYYY/MM   2     c
2    45,2        YYYY/MM   1     z
3    11,1        YYYY/MM   1     p
我想为每一行选择,半径差在下面的所有行,例如5

我定义了一个函数来计算simple,这是一个示例:

def diff_radius (a,b)
    return a-b
每行是否可以找到一些行来检查调用外部函数时的条件

我尝试了一些方法,但不起作用:

for i in range(df.shape[0]):
     ....
     df_in_radius=df.apply(lambda x : diff_radius(df[i]['radius'],x['radius']))

你能帮我吗?

我假设radius列的数据类型是元组。您可以将diff_radius方法保留为

def diff_radius(x):
    a, b = x
    return a-b
然后,您可以使用pandas中的loc方法选择与半径差小于5的条件相匹配的行

df.loc[df.radius.apply(diff_radius) < 5]
我说错了

我的数据帧是:

     radius of my atom      date     spin  atom
0    12.50                  YYYY/MM   0     he
1    11.23                  YYYY/MM   2     c
2    45.2                   YYYY/MM   1     z
3    11.1                   YYYY/MM   1     p
我做一个循环,在一行上应用一个特殊的计算,计算每行的响应条件。 例如:


我真诚地感谢您的回答

我想半径不是逗号而是点?您能精确地指出半径和“某物”之间的差异在5以下吗?对不起,我弄错了:df_in_radius=df.applylambda x:diff_radiudf[I]['radius',x['radius']<5我想为每一行构建一个具有相同列的数据框,其中loc[i]半径之间的差异小于5对不起,我有一个全局数据框。对于我想选择的每一行调用,在相同的数据框行中,与i半径之间的差异小于5。这种治疗是循环的。i从0到数据帧的长度不等。请用所有开始的假设修改您的问题,因为没有人理解……例如,我们必须猜测您有一个全局数据帧col radius不是元组。这是我的元素半径的值。对不起,我用逗号而不是点。@oxthon我已经更新了字符串的答案。请查收
     radius of my atom      date     spin  atom
0    12.50                  YYYY/MM   0     he
1    11.23                  YYYY/MM   2     c
2    45.2                   YYYY/MM   1     z
3    11.1                   YYYY/MM   1     p
def diff_radius(current_row,x):
    current_row['radius']-x['radius']
    return a-b

df=pd.read_csv(csvfile,delimiter=";",names=('radius','date','spin','atom'))
# for each row of original dataframe
for i in range(df.shape[0]):

      # first build a new and tmp dataframe with row
      # which have a radius less 5 than df.iloc[i]['radius] (level of loop)
      df_tmp=df[diff_radius(df.iloc[i]['radius],df['radius']) <5]
      ....
      # start of special calc, with the df_tmp which contains all of rows
      # less 5 than the current row **(i)**