我有一个多列的数据框。

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


列具有nameproduct

如何选择具有多个产品(例如产品nameAB)的那些C。换句话说,我希望Peter拥有ABC,但没有Jake,因为他只有AB

编辑:我不希望name仅具有A,B和C,但我只想查看它们是否具有ABC。因此,如果Peter的D(未包含在示例中)也很好。

我试过了:

df[(df.Product == 'A') & (df.Product == 'B') & (df.Product == 'C')]


但这没有结果。

df[(df.Product == 'A') | (df.Product == 'B') | (df.Product == 'C')]


而这只是连接行。

最佳答案

这是isinfilter的一种方法-但如果有大数据,速度会很慢:

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/

10-12 20:07
查看更多