簡體   English   中英

如何使用多個布爾條件在Pandas DataFrame中選擇特定列

[英]How to Select Specific Columns in Pandas DataFrame Using Multiple Boolean Conditions

我正在嘗試為上述問題找到一個很好的,全面的答案。

讓我們采用以下數據框:

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']選擇列A並使用df[['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)返回錯誤消息。

理想情況下,我正在尋找的解決方案具有以下條件:

  1. 可以在單列或多列上使用。 即,您可以同時選擇df['A']df['B']
  2. 如果需要,可以使用多個布爾條件,而不僅僅是一個。
  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

@WB的答案只是使用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

您正在正確處理df['B'].where(df.A > 0)條件。 但是,僅在其后附加一些其他功能即可僅實現True結果。

具有多個(也可以通過單個)條件的示例:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM