我有一个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']]
,但这似乎不起作用。我该怎么做呢?
答案 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)]