[英]Pandas: Select Rows with condition for several columns
我正在使用它有條件地選擇column
行:
X.loc[data['column'] == 1]
但我想將此條件擴展到幾列。 這些列有一些共同點:它們包含相同的字符串。 所以實際上我有column1
, column2
,..., 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.