Pandas:按 OR 条件索引行

The*_*ude 5 python pandas

我正在尝试过滤掉数据框中的某些行,这些行允许两列的值的两种组合。例如,列 'A' 和 'B' 可以是 'A' > 0 和 'B' > 0 或 'A' < 0 和 'B' < 0。我想过滤的任何其他组合。

我尝试了以下

df = df.loc[(df['A'] > 0 & df['B'] > 0) or (df['A'] < 0 & df['B'] < 0)]
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我知道这可能是一个非常微不足道的问题,但老实说我找不到任何解决方案,我无法弄清楚我的方法有什么问题。

fly*_*all 6

您需要一些括号并为熊猫格式化(和/或成为&/|):

df = df[((df['A'] > 0) & (df['B'] > 0)) | ((df['A'] < 0) & (df['B'] < 0))]
Run Code Online (Sandbox Code Playgroud)

请记住这是在做什么 - 您只是在构建一个巨大的 [True, False, True, True] 列表并将其传递到 df 索引中,告诉它根据它是 True 还是 False 保留每一行在相应的列表中。