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