【问题标题】:How to compare two pandas dataframe rows and return the value?如何比较两个熊猫数据框行并返回值?
【发布时间】:2019-11-13 10:02:38
【问题描述】:

我有 2 个 pandas 数据框,例如 第一个数据农场

 index  a   b   c   d
   0    4   5   3   2
   1    1   10  21  34
   2    3   32  1   45
   3    56  42  42  23

第二个数据帧

index   a  b  c  d
  LL    2  2  2  1
  UL    42 2  1  8

我想要这样的例外输出。

 index  a   b   c   d   result
   0    4   5   3   2    [5,3]
   1    1   10  21  34   [1,10,21,34]
   2    3   32  1   45   [32,1,45]
   3    56  42  42  23   [56,42,42,23]

在此我将第二个数据帧行与第一个数据帧行进行比较。条件是,如果第一个数据帧的值小于第二个数据帧的 LL 行,它将被添加到结果列中,同样如果第一个数据帧的值大于第二个数据帧的 UL 行,它将被添加到结果列中。

【问题讨论】:

  • 你的逻辑很难理解,现在对我来说没有多大意义。 5 and 3 比 2 小多少?
  • @Erfan 他想要它们,如果它们小于“LL”值或大于“UL”值。
  • 那你能解释一下第二行吗? @Aryerez
  • @Erfan 1小于LL 2, 10大于UL 2, 21大于UL 1, 34 比 UL 8 大,所以所有的项目都是True 所以他们进入result
  • 现在明白了,谢谢@Aryerez

标签: python pandas dataframe


【解决方案1】:

你可以这样做


cond = (first_df<second_df.loc['LL',:]) | (first_df>second_df.loc['UL',:])
first_df['result'] = first_df[cond].apply(lambda x : list(x.dropna()), axis=1)

鉴于index 是您的两个数据框中的索引,如果不是,您可以这样做

first_df.set_index('index', inplace=True)
second_df.set_index('index', inplace=True)
    a   b   c   d   result
index                   
0   4   5   3   2   [5.0, 3.0]
1   1   10  21  34  [1.0, 10.0, 21.0, 34.0]
2   3   32  1   45  [32.0, 1.0, 45.0]
3   56  42  42  23  [56.0, 42.0, 42.0, 23.0]

【讨论】:

  • 对不起兄弟我犯了一个错误..实际我想在索引中添加结果列,输出会像这个结果一样不同[1,56] [5,10,32,42][3 ,21,1,42][34,45,23] 在各个列中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
  • 2020-03-09
相关资源
最近更新 更多