我有一个多列的数据框。
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
,A
和B
)的那些C
。换句话说,我希望Peter拥有A
,B
和C
,但没有Jake,因为他只有A
和B
。编辑:我不希望
name
仅具有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: []
关于python - 选择希望列中的值具有多个值的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59196689/