2016-11-13 66 views
1

我有一個熊貓據幀df,看起來像這樣:如何將列值爲列表的pandas DataFrame子集?

A  B 
0 ['a','b'] 
1 ['c','d'] 
2 ['a','c'] 
3 ['b','d'] 
4 ['a','d'] 

現在,我希望通過只選擇其中'a'屬於列表B這些行子集df,所需的輸出感:

A  B 
0 ['a','b'] 
2 ['a','c'] 
4 ['a','d'] 

天真地,我試過df['a' in df['B']],但這似乎不起作用。我會如何去做這件事?

回答

2

使用apply是一種過濾方式。

In [39]: df[df['B'].apply(lambda x: 'a' in x)] 
Out[39]: 
    A  B 
0 0 [a, b] 
2 2 [a, c] 
4 4 [a, d] 
2

假設列表的長度在所有行一樣,這裏有一個量化的方法 -

df[(df.B.values=='a').any(1)] 

如果df.B.values創建對象D型數組,我們可能需要使用一個扁平化操作有np.concatenate,像這樣 -

df[(np.concatenate(df.B)=='a').reshape(len(df),-1).any(1)] 
相關問題