首页 > 解决方案 > 根据多个条件过滤数据框结果

问题描述

我正在努力根据多个条件过滤数据框结果集,希望您对以下案例提供帮助。

在下面的示例中,我想根据数据框中的两个条件进行过滤:

  1. “条件 1”列 = 1
  2. “条件 2”列 = 0

在代码中,我使用以下逻辑通过“filt”变量过滤结果:

filt = (df["Condition 1"] )== 1 & (df["Condition 2"] == 0)

不幸的是,双条件过滤器不会产生预期的结果。事实上,输出中既不满足条件 1 也不满足条件 2。

print(df.loc[filt, "Condition 3"])

另一种可行但我想避免的方法是创建第三个条件,其中“条件 1”-“条件 2”= 1并以此为基础进行过滤。这将如下所示:

filt2 = df["Condition 3"] == 1

print(df.loc[filt2, "Condition 3"])

请注意,在这种情况下,过滤器(“filt2”)中只有一个条件最终会产生预期的结果。

我的问题是:

  1. 在我的示例中,多个(两个)过滤器不起作用,而单个条件过滤器起作用,是否有原因?我在代码中忽略了什么?
  2. 对于用于创建第三种条件的替代方法,是否有更好和更简单的解决方案?

PS:下面关于“filt”的代码也会产生预期的结果。

filt = df["Condition 1"] - df["Condition 2"] == 1

标签: pythonpandas

解决方案


你应该像这样过滤:

filt = df[(df["Condition 1"] == 1) & (df["Condition 2"] == 0)]

过滤数据框将包含所需的结果


推荐阅读