2017-10-05 41 views
0

我有一個有很多列的數據框(大約1000)。 給定一組列(10左右),其值爲0或1,我想選擇上述列集中所有具有1的行。如何獲得一組列與Pandas中給定值相等的行?

玩具示例。我的數據幀是這樣的:

c1,c2,c3,c4,c5 
'a',1,1,0,1 
'b',0,1,0,0 
'c',0,0,1,1 
'd',0,1,0,0 
'e',1,0,0,1 

而且我想獲得其中列C2和C5等於1的行:

'a',1,1,0,1 
'e',1,0,0,1 

這將是做到這一點的最有效方法?

謝謝!

回答

0

你能嘗試做這樣的事情:

df.loc[df['c2'] == 1 & df['c5'] == 1] 
+0

是的,但我想做一個函數,所以我需要一個更通用的解決方案。 –

+0

沒有什麼能夠阻止你製作「c2」和「c5」,並將目標作爲變量。 你有你需要的一切將其轉換爲函數 –

1

這將是多列cols

In [1277]: cols = ['c2', 'c5'] 

In [1278]: df[(df[cols] == 1).all(1)] 
Out[1278]: 
    c1 c2 c3 c4 c5 
0 'a' 1 1 0 1 
4 'e' 1 0 0 1 

或多個通用,

In [1284]: df[np.logical_and.reduce([df[x]==1 for x in cols])] 
Out[1284]: 
    c1 c2 c3 c4 c5 
0 'a' 1 1 0 1 
4 'e' 1 0 0 1 

或者,

In [1279]: df.query(' and '.join(['%s==1'%x for x in cols])) 
Out[1279]: 
    c1 c2 c3 c4 c5 
0 'a' 1 1 0 1 
4 'e' 1 0 0 1 
0
import pandas as pd 

frame = pd.DataFrame([ 
['a',1,1,0,1], 
['b',0,1,0,0], 
['c',0,0,1,1], 
['d',0,1,0,0], 
['e',1,0,0,1]], columns='c1,c2,c3,c4,c5'.split(',')) 

print(frame.loc[(frame['c2'] == 1) & (frame['c5'] == 1)]) 
相關問題