簡體   English   中英

熊貓:為幾列選擇有條件的行

[英]Pandas: Select Rows with condition for several columns

我正在使用它有條件地選擇column行:

X.loc[data['column'] == 1]

但我想將此條件擴展到幾列。 這些列有一些共同點:它們包含相同的字符串。 所以實際上我有column1column2 ,..., column100等,並且此條件應適用於所有這些列。 實際上是這樣的(通配符):

X.loc[data['column*'] == 1]

這些條件應與OR關聯。 有機會輕松做到這一點嗎?

對於某些數據框X

   p A  p B  p C
0    0    0    0
1    0    0    0
2    0    0    1
3    0    0    0
4    0    0    0
5    0    0    0
6    1    0    0

如果可以在col_list設置要測試的列的名稱

col_list = X.columns

然后,您可以使用np.any()在每個對象之間或之間進行測試:

X.loc[(X[col_list] == 1).any(axis=1)]

這給你:

   p A  p B  p C
2    0    0    1
6    1    0    0

通知您不需要loc並且仍然會得到相同的答案,有關信息請致@MaartynFabre

X[(X[col_list] == 1).any(axis=1)]

   p A  p B  p C
2    0    0    1
6    1    0    0

測試數據框

    col0 col1 col2
0   1    1    2
1   1    1    1
2   2    2    2

用所有列的測試創建一個新的數據框

result_s = d.concat((df['col%i'%i] == 1 for i in range(3)), axis=1).all(axis=1)

結果是

0    False
1     True
2    False
dtype: bool

如果你做df[result_s]你會得到

    col0 col1 col2
1   1    1    1

這將選擇所有列均為==1的行。如果其中之一足夠, .any .all()更改為.any

    col0 col1 col2
0   1    1    2
1   1    1    1

將每個比較放在方括號中,並將它們與邏輯運算符組合:

pd.DataFrame(X).loc[(data['col1']==23) & (data['col2']==42)] # and
pd.DataFrame(X).loc[(data['col1']==23) | (data['col2']==42)] # or

這是另一種考慮方式:

df
   col0  col1  col2
0     1     1     2
1     1     1     1
2     2     2     2

df.loc[df['col0'] == 1, [x for x in df.columns if x == 'col0']]
   col0
0     1
1     1

您可以使用列表推導來查找所需的列。

暫無
暫無

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

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