2017-03-07 53 views
1

我知道這必須在以太地方,但我找不到它。我很流利地研究R,試圖找出Pandas,這讓我想把這臺PC扔出窗外。這是一個漫長的一天。如何獲得一列中哪些列在Pandas中的某些值內?

我希望能夠提取數據幀的列名的基礎上,在一些列的列中的值:

foo = pd.DataFrame(
[[-1,-5,3,0,-5,8,1,2]], 
columns = ('a','b','c','d','e','f','g','h') 
) 

foo 
Out[25]: 
    a b c d e f g h 
0 -1 -5 3 0 -5 8 1 2 

我想獲得一個載體,我可以通過子集的一些其他數據框:

foo >= 0 

給了我另一個數據框,我不能使用子集一個向量(系列不管你人把它作爲???)

我想要做這樣的事情:

otherDF[ foo >= 0 ] 

想法?

+1

你想在你的'otherDF'中子集?行,列還是兩者? – pansen

回答

1

您只需要使用loc(例如, df.loc [:,列])

import pandas as pd 
import numpy as np 

cols = ('a','b','c','d','e','f','g','h') 
foo = pd.DataFrame(
[[-1,-5,3,0,-5,8,1,2]], 
columns = cols) 

bar = pd.DataFrame(np.random.randint(0, 10, (3, len(cols))), columns=cols) 

print foo 

    a b c d e f g h 
0 -1 -5 3 0 -5 8 1 2 

print bar 

    a b c d e f g h 
0 7 9 2 9 5 3 2 9 
1 5 7 4 1 5 1 4 0 
2 4 9 1 3 3 7 0 2 


columns_boolean = foo.iloc[0] >= 0 
columns_to_keep = foo.columns[columns_boolean] 

print bar.loc[:, columns_to_keep] 


    c d f g h 
0 2 9 3 2 9 
1 4 1 1 4 0 
2 1 3 7 0 2 

另外,如果你的其他數據幀不具有相同的列名,但有相同的列數,你仍然可以使用「祿」,但只是傳中,布爾值數組,其列數保持不變:

bar.loc[:, columns_boolean.values] 



    c d f g h 
0 7 2 6 3 9 
1 4 3 8 0 3 
2 5 7 1 3 0 
1

IIUC你列面膜後是:

In [25]: 
foo[foo >= 0].dropna(axis=1).columns 

Out[25]: 
Index(['c', 'd', 'f', 'g', 'h'], dtype='object') 

如果您使用條件來掩蓋DF:

In [26]: 
foo[foo >= 0] 

Out[26]: 
    a b c d e f g h 
0 NaN NaN 3 0 NaN 8 1 2 

如果我們再與NaN刪除列,該只保留了感興趣的列:

In [27]: 
foo[foo >= 0].dropna(axis=1) 

Out[27]: 
    c d f g h 
0 3 0 8 1 2 

然後,您可以只使用.columns屬性

相關問題