【问题标题】:How to compare four columns of pandas dataframe at a time?如何一次比较四列熊猫数据框?
【发布时间】:2017-01-27 04:00:35
【问题描述】:

我有一个数据框。

数据框:

   Symbol1   BB Symbol2 CC 
0         ABC    1  ABC       1
1         PQR    1  PQR       1
2         CPC    2  CPC       0
3         CPC    2  CPC       1
4         CPC    2  CPC       2

我想将Symbol1Symbol2BBCC 进行比较,如果它们相同,那么我希望只有其他行必须从数据框中删除。

预期结果:

Symbol1   BB Symbol2 CC 
0         ABC    1  ABC       1
1         PQR    1  PQR       1
2         CPC    2  CPC       2

如果在两行之间进行比较,那么我正在使用:

df = df[df['BB'] == '2'].copy()

它会正常工作的。

df = df[df['BB'] == df['offset'] and df['Symbol1'] == df['Symbol2']].copy()

这给了我错误。

错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

如何比较并获得预期结果?

【问题讨论】:

  • 请显示您的错误,但您应该使用&(带括号)而不是and

标签: python pandas indexing dataframe conditional-statements


【解决方案1】:

这是另一种方式,更好一点,但也有点慢:

In [65]: df.query('Symbol1 == Symbol2 and BB == CC')
Out[65]:
  Symbol1  BB Symbol2  CC
0     ABC   1     ABC   1
1     PQR   1     PQR   1
4     CPC   2     CPC   2

【讨论】:

    【解决方案2】:

    您可以使用boolean indexing 并与& 进行比较,而不是and

    print ((df.Symbol1 == df.Symbol2) & (df.BB == df.CC))
    0     True
    1     True
    2    False
    3    False
    4     True
    dtype: bool
    
    print (df[(df.Symbol1 == df.Symbol2) & (df.BB == df.CC)])
      Symbol1  BB Symbol2  CC
    0     ABC   1     ABC   1
    1     PQR   1     PQR   1
    4     CPC   2     CPC   2
    

    【讨论】:

    • 谢谢。我不知道使用 & 进行布尔索引。
    • 如果我或其他答案有帮助,请不要忘记。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多