我有一个多列的数据框。
df= pd.DataFrame({
'Name': ['Peter', 'Peter', 'Peter', 'Jake', 'Jake'],
'Product' : ['A', 'B', 'C', 'A', 'B']
})
Name Product
0 Peter A
1 Peter B
2 Peter C
3 Jake A
4 Jake B
列具有name
和product
。
我该如何选择那些name
s的多种产品,例如产品A
,B
和C
。换句话说,我希望彼得具有A
,B
和C
,而不是杰克,因为他只有A
和B
。
编辑:我不希望这样的name
■找JUST A,B和C,但我只是想看看他们是否有A
,B
,和C
。因此,如果Peter拥有D
(样本中未包含),也很好。
我试过了:
df[(df.Product == 'A') & (df.Product == 'B') & (df.Product == 'C')]
但这没有结果。
df[(df.Product == 'A') | (df.Product == 'B') | (df.Product == 'C')]
而这只是连接行。
这是isin
使用filter
-的一种方法,但是如果有大数据则很慢:
df=df.groupby('Name').filter(lambda x : pd.Series(['A','B','C']).isin(x['Product']).all())
df
Name Product
0 Peter A
1 Peter B
2 Peter C
来自Jez的测试案例
df= pd.DataFrame({
'Name': ['Peter', 'Peter', 'Peter', 'Jake', 'Jake','Jake'],
'Product' : ['A', 'B', 'C', 'A', 'B','A']
})
df.groupby('Name').filter(lambda x : pd.Series(['A','B','C']).isin(x['Product']).all())
Name Product
0 Peter A
1 Peter B
2 Peter C
根据他的提供 'Product' : ['A', 'A', 'C', 'A', 'B','A']
df.groupby('Name').filter(lambda x : pd.Series(['A','B','C']).isin(x['Product']).all())
Empty DataFrame
Columns: [Name, Product]
Index: []
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句