2016-11-04 217 views
0

的總和我有一個數據幀過濾數據幀在熊貓上行

[1] df 
ProductIds A B C D 
11210000018 0 0 0 0 
11210000155 1 0 0 0 
11210006508 0 0 0 0 
11210007253 0 0 0 0 
11210009431 0 0 0 0 
11210135871 1 0 0 0 

我想通過將每個行過濾幀,並且如果總和大於零,然後過濾該行。對於給定的條件下的結果會像這樣做的

ProductIds A B C D 
11210000155 1 0 0 0 
11210135871 1 0 0 0 

一種方法是用和另一列添加,然後篩選如下所示:

df['Sum'] = df.sum(axis = 1) 
df = df[df.Sum > 0] 
df.drop(['Sum'] 

但沒有任何一個襯墊內建方法去做這個 ?我無法手動添加列,因爲有成千上萬的列。謝謝。

+1

你可能剛剛完成'df = df [df.sum(axis = 1)> 0]' – EdChum

回答

1

我認爲你可以使用DataFrame.all如果DataFrame0和數字爲0高 - 測試如果行的所有值0然後用boolean indexing

mask = (df == 0).all(axis=1) 
print (mask) 
ProductIds 
11210000018  True 
11210000155 False 
11210006508  True 
11210007253  True 
11210009431  True 
11210135871 False 
dtype: bool 

print (df[~mask]) 
      A B C D 
ProductIds    
11210000155 1 0 0 0 
11210135871 1 0 0 0 

更普遍的解決方案是boolean indexing使用boolean mask - 不需要創建新列:

df = df[df.sum(axis = 1) > 0] 
0

另一種解決方案:

In [194]: df.query('A + B + C + D > 0') 
Out[194]: 
      A B C D 
ProductIds 
11210000155 1 0 0 0 
11210135871 1 0 0 0