我有一個包含許多列的 df,我想選擇所有具有任何 2 個非零列值的行。過濾特定列非零的行是微不足道的,我的意思是這可能也是微不足道的,但它讓我望而卻步。have/want以下可復制示例的資料框:
import pandas as pd
have = pd.DataFrame({'ID': [1,2,3,4,5],
'grp1': [1,0,0,0,0],
'grp2': [0,2,0,0,0],
'grp3': [1,1,0,0,5]})
want = have.iloc[0:2]
>>> want
ID grp1 grp2 grp3
0 1 1 0 1
1 2 0 2 1
最后一點 - 我經常在 pandas 和 sql(ite) 之間來回傳遞,所以如果在 sql 中有一種比我缺少的 pandas 更優雅的方法來執行此操作,我也對此持開放態度。
uj5u.com熱心網友回復:
在熊貓中:
have[have.iloc[:,1:].gt(0).sum(1).gt(1)]
ID grp1 grp2 grp3
0 1 1 0 1
1 2 0 2 1
uj5u.com熱心網友回復:
IIUC,您需要:
have.loc[(have.iloc[:,1:]!=0).sum(1)>1]正如你所說的非零值。
uj5u.com熱心網友回復:
您可以將列型別轉換為 bool,然后將為零,將Fasle非零True和求和True以獲得非零計數。
out = have[have.filter(like='grp').astype(bool).sum(axis=1).ge(2)]
print(out)
ID grp1 grp2 grp3
0 1 1 0 1
1 2 0 2 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/464380.html
