2014-12-26 63 views
1

比方說,我在熊貓以下數據幀:檢索列基於在數據幀的條件

import pandas as pd 
pd.DataFrame({'A': [True, False], 'B':[False, True], 'C':[True, True], 'D':[False, False], 'E':[False, False]}) 

我怎樣才能得到只有那些真正的列?我有一個DataFrame 2000+列填充只有FalseTrue值和每行我想獲得True列。

+1

我想弄清楚,什麼是您的預期輸出的例? –

+0

例如我想獲得第0行的列表['A','C']和第1行的列表['B','C'] – efajardo

回答

1

您可以使用DataFrame df中的任何行作爲列標籤的布爾值索引df.columns。這將返回僅包含「真實」列的Index對象:

>>> df.columns[df.loc[0]] 
Index([u'A', u'C'], dtype=object) 

因爲這是一個Index對象不是一個Python列表,你可以使用tolist()把它變成一個:

>>> df.columns[df.loc[0]].tolist() 
['A', 'C'] 
+0

不確定你需要'values';在當前的'pandas'中,它看起來像'tolist'是'Index'的一種方法。 – DSM

+0

@DSM謝謝!我從來沒有檢查過。很高興知道。 –

+0

非常感謝!這正是我所期待的。 – efajardo

0

我承擔你使用[row] [column]結構。下面這段代碼應工作:

>>> dictionary = {'A': [True, False], 'B':[False, True], 'C':[True, True], 'D':[False, False], 'E':[False, False]} 
>>> itemList = list(dnaComplements.items()) 
>>> [x[0] for x in itemList if x[1][1] == True] 

將返回

>>> ['B', 'C'] 
>>> 
0

如果你想知道這列有所有真:

>>> L = pd.DataFrame({'A': [True, False], 'B':[False, True], 'C':[True, True], 'D':[False, False], 'E':[False, False]}) 

>>> L 
     A  B  C  D  E 
0 True False True False False 
1 False True True False False 

>>> M = lambda x: x.all() 
>>> P = L.apply(M) 
>>> L = [ col for col in dict(P) if P[col]] 
>>> L 
['C']