如何使用多个布尔条件选择 Pandas DataFrame 中的特定列

Posted

技术标签:

【中文标题】如何使用多个布尔条件选择 Pandas DataFrame 中的特定列【英文标题】:How to Select Specific Columns in Pandas DataFrame Using Multiple Boolean Conditions 【发布时间】:2019-05-25 22:53:15 【问题描述】:

我正在努力为上述问题找到一个非常好的、全面的答案。

让我们采用以下数据框:

df = pd.DataFrame(np.random.randn(4,4), columns=['A', 'B', 'C', 'D'])
df['Category'] = pd.Series(['Cat1', 'Cat2', 'Cat1', 'Cat2'])
df:
            A         B         C         D Category
  0  0.057456  0.462712 -1.245539  0.095947     Cat1
  1  0.741688  0.353600  1.130754 -1.692440     Cat2
  2  0.638623 -0.109566  0.118509 -0.692661     Cat1
  3 -0.905806  0.284818 -0.094696 -1.325617     Cat2

我了解使用df.Adf['A'] 选择列Adf[['A', 'B']] 选择列AB 的基本命名法。

如果我想传入布尔条件,我可以执行 df[df.A > 0] 之类的操作来返回 df.A 大于 0 的行。我可以包含多个条件,例如 df[(df.A > 0) & (df.Category == 'Cat1')] 以包含多个条件。

但我没有看到的一件事是,我如何选择具有上面使用的两个布尔条件的数据框列的子集。

我尝试过的两种方法都没有成功:

df['B'].where(df.A > 0)

这会返回索引中的所有行,而我只想要那些为所述条件返回 True 的行。

我也尝试过使用query,但没有成功,因为它不能用于系列。

所以df['A'].query(some condition) 返回一条错误消息。

理想情况下,我正在寻找的解决方案具有以下条件:

    既可用于单列也可用于多列。也就是说,你可以同时选择df['A']df['B']。 可以根据需要使用多个布尔条件,而不仅仅是一个。 仅返回条件为 True 的行,而不是所有行。 理想情况下,语法上很简单,但如果不可能,那就这样吧。

谢谢。

【问题讨论】:

【参考方案1】:

我想你在找.loc

df.loc[df.A>0,'B']
0    0.462712
1    0.353600
2   -0.109566
Name: B, dtype: float64
df.loc[(df.A>0)&(df.B<0),['B','C']]
          B         C
2 -0.109566  0.118509

【讨论】:

你太快了!并祝贺你获得 100K!【参考方案2】:

您正在正确处理您的df['B'].where(df.A &gt; 0) 条件。但是,只需在其后附加几个函数即可仅实现 True 结果。

具有多个(也可以通过单个)条件的示例:

df[['B','C']].where((df.A > 1) & (df.D>0)).dropna().reset_index(drop=True)

【讨论】:

【参考方案3】:

只是@W-B's answer 的变体,使用query

df.query('A > 0 and B < 0').loc[:, ['B', 'C']]

df.query('A > 0 and B < 0')[['B', 'C']]

也会打印

          B         C
2 -0.109566  0.118509

【讨论】:

@Datanovice:“只在索引上工作”是什么意思?我查看了问题中列出的四个要求,并认为query 解决了所有这些要求。它也是works fine on different index levels。 抱歉,我应该先查阅文档。我在想。 .filter函数。谢谢你教我一些新东西。 @Datanovice:不用担心 :)

以上是关于如何使用多个布尔条件选择 Pandas DataFrame 中的特定列的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Pandas 数据框中的负数替换为零

Pandas:更改通过列中的布尔索引选择的值而不会收到警告

如何根据计数器应用多个条件,并使用 pandas 和 python 在 excel 中为每个条件提供输出?

如何使用for循环或条件在pandas数据框的子集中创建多个回归模型(statsmodel)?

14.pandas里面按条件筛选

Pandas:为啥在布尔索引后需要双括号来选择列