选择特定的列

时间:2019-03-01 08:59:41

标签: 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的所有行,例如5

我已经定义了一个要计算的函数(简单,这是一个例子):

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']))

你能帮我吗?

2 个答案:

答案 0 :(得分:1)

我假设radius列的数据类型是tuple。您可以像这样保留diff_radius方法

def diff_radius(x):
    a, b = x
    return a-b

然后,您可以在熊猫中使用loc方法来选择与半径差小于5的条件匹配的行。

df.loc[df.radius.apply(diff_radius) < 5]

编辑#1

如果radius列的数据类型是string,则将其拆分并进行类型转换。逻辑将采用diff_radius方法。如果是string

def diff_radius(x):
    x_split = x.split(',')
    a,b = int(x_split[0]), int(x_split[-1])
    return a-b

答案 1 :(得分:0)

我打错了。

我的数据框是:

     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)**

衷心感谢您的回答