【问题标题】:Selecting rows in pandas dataframe [duplicate]在熊猫数据框中选择行[重复]
【发布时间】:2020-12-23 06:04:02
【问题描述】:

我需要选择满足以下条件的行:

  • 如果(X 为真,Z 为假)| (X 为假,Z 为真)然后分配给一个新列 True 作为值。

我试过这个:

df[(df[X']==True & df['Z']==False) | (df['X']==False & df['Z']==True)]

但我收到以下错误:

ValueError:Series 的真值不明确。使用 a.empty, a.bool()、a.item()、a.any() 或 a.all()。

我尝试过如下使用any()

【问题讨论】:

  • @AMC 虽然我同意 ()s 围绕这些条款会起作用,但其中许多答案还解决了这样一个事实,即这组复杂的条件是不必要的,并且不仅仅是指出优先级问题。评论和否决欺骗问题的所有答案是不正常的。标记或投票问题。
  • @AChampion 虽然我同意围绕条款的 ()s 会起作用,但其中许多答案也解决了这样一个事实,即这组复杂的条件是不必要的,并且不仅仅是指出优先级问题. 即使我们忽略了重复问题,问题仍然缺少 MCVE,以及部分错误输出。
  • 评论和否决一个欺骗问题的所有答案是不正常的。 正常是什么意思,根据谁?我在the discussion with BEN_YO 中分享了一些帖子,这表明它并非全部那么罕见。

标签: python pandas


【解决方案1】:

如果你所有的值都是布尔值,你可以试试这个

df[(df['X'] & ~df['Z']) | (~df['X'] & df['Z'])]

【讨论】:

【解决方案2】:

df['X']==True & df['Z']==False 必须是 (df['X']==True) & (df['Z']==False)(以及其他所有内容)。在 Python 中,运算符 & 的优先级高于 ==。您的表达式被解释为df['X']==(True & df['Z'])==False

【解决方案3】:

检查

df[((df['X']==True) & (df['Z']==False)) | ((df['X']==False) & (df['Z']==True))]

这里还有一点数学

df[df.X.astype(int).add(df.Z.astype(int)==1]

来自冠军

df[df.X!=df.Z]

【讨论】:

【解决方案4】:

如果X和Y只包含True和False,下面会给出答案(请查看How do you get the logical xor of two variables in Python?):

df[df['X']!=df['Z']]
猜你喜欢
  • 2021-03-06
  • 2018-06-06
  • 2018-11-26
  • 1970-01-01
  • 2018-05-20
  • 2014-10-01
  • 2022-01-21
  • 2021-07-15
  • 2018-07-10
相关资源
最近更新 更多