如何将列值为列表的pandas DataFrame子集化?

时间:2016-11-13 05:32:29

标签: python python-2.7 pandas

我有一个pandas DataFrame df,如下所示:

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

现在,我希望通过仅选择df属于'a'中列表的行来对B进行分组,所需的输出为:

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

天真地,我尝试了df['a' in df['B']],但这似乎不起作用。我该怎么做呢?

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:2)

假设所有行的列表长度相同,这是一个矢量化方法 -

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

如果df.B.values创建了一个Object dtype数组,我们可能需要在np.concatenate处使用展平操作,就像这样 -

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