在熊猫数据框中选择行[重复]

Posted

技术标签:

【中文标题】在熊猫数据框中选择行[重复]【英文标题】: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()

【问题讨论】:

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

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

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

【讨论】:

这不是简化为df['X'] != df['Z']吗? @AChampion: 是的,没错 :) ***.com/q/36921951【参考方案2】:

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

【讨论】:

***.com/q/36921951【参考方案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]

【讨论】:

df.X != df.Z? @AChampion 正确~ 我也测试过 xor 也可以工作 df.X ^ df.Z ***.com/q/36921951 让我们continue this discussion in chat.【参考方案4】:

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

df[df['X']!=df['Z']]

【讨论】:

***.com/q/36921951

以上是关于在熊猫数据框中选择行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将列值分配给熊猫数据框中的唯一行[重复]

从熊猫数据框中删除重复行:不区分大小写的比较

如何根据条件表达式从熊猫数据框中删除行[重复]

如何根据条件表达式从熊猫数据框中删除行[重复]

使用“或”在熊猫数据框中选择值时如何编写条件[重复]

从熊猫数据框中选择特定行