Skip to main content
 首页 » 编程设计

python之如何使用多个 bool 条件选择 Pandas DataFrame 中的特定列

2025年05月04日14thcjp

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

让我们采用以下数据框:

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.A 或 df['A'] 选择列 A 和 的基本命名法df[['A', 'B']] 选择 A 和 B 两列。

如果我想传递 bool 条件,我可以做 df[df.A > 0] 之类的事情来返回 df.A 大于 0 的行. 我可以包含多个条件,例如 df[(df.A > 0) & (df.Category == 'Cat1')] 以包含多个条件。

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

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

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

这会返回索引中的所有行,而我只喜欢针对所述条件返回 True 的行。

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

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

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

  1. 可用于单列或多列。也就是说,您可以同时选择 df['A'] 和 df['B']。
  2. 如果需要,可以使用多个 bool 条件,而不仅仅是一个。
  3. 仅返回条件的计算结果为 True 的行,而不是所有行。
  4. 理想情况下语法简单,但如果那不可能,那就这样吧。

谢谢。

请您参考如下方法:

我认为您正在寻找 .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