【问题标题】:Select specific columns选择特定列
【发布时间】:2019-03-01 20:21:25
【问题描述】:

我有一个科学家数据框

     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

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

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

你能帮帮我吗?

【问题讨论】:

  • 我想这不是逗号,而是半径的点?
  • 你能准确的计算出半径和“某物”小于 5 之间的差异吗?
  • 对不起,我有一个错误:df_in_radius=df.apply(lambda x : diff_radius(df[i]['radius'],x['radius'])
  • 对不起,我有一个全局数据框。对于我想选择的每一行(调用“i”),在相同的数据框行中,与“i”的半径之差小于 5。这个治疗是一个循环。 “i”从 0 到数据帧的长度不等。
  • 请用所有开始的假设修改您的问题,因为没有人理解....例如,我们必须猜测您有一个全局数据框

标签: python pandas selection


【解决方案1】:

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

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

然后,您可以在 pandas 中使用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

【讨论】:

  • col 半径不是元组。这是我的元素半径的值。对不起,我用逗号而不是点。
  • @oxthon 我已经更新了string 的答案。请检查
【解决方案2】:

我说错了。

我的数据框是:

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

衷心感谢您的回答

【讨论】:

    猜你喜欢
    • 2018-11-03
    • 2015-04-18
    • 1970-01-01
    • 2014-01-04
    • 2011-02-27
    • 2018-03-17
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多