Python 3.x 如何查找另一列在不同行中具有多个值的列值的总长度

Python 3.x 如何查找另一列在不同行中具有多个值的列值的总长度,python-3.x,pandas,numpy,dataframe,summary,Python 3.x,Pandas,Numpy,Dataframe,Summary,有没有办法找到同时包含苹果和草莓的ID,然后找到总长度?只有苹果的ID和只有草莓的ID df: 谢谢 如果在水果列中,所有值始终仅为苹果或草莓,则可以比较每组的集合,然后通过真值的和计算ID: v = ['Apple','Strawberry'] out = df.groupby('ID')['Fruit'].apply(lambda x: set(x) == set(v)).sum() print (out) 2 编辑:如果有多个值: s = df.groupby('ID')['Fruit'

有没有办法找到同时包含苹果和草莓的ID,然后找到总长度?只有苹果的ID和只有草莓的ID

df:


谢谢

如果在
水果
列中,所有值始终仅为
苹果
草莓
,则可以比较每组的集合,然后通过
值的
计算
ID

v = ['Apple','Strawberry']
out = df.groupby('ID')['Fruit'].apply(lambda x: set(x) == set(v)).sum()
print (out)
2
编辑:如果有多个值:

s = df.groupby('ID')['Fruit'].agg(frozenset).value_counts()
print (s)
{Apple}                2
{Strawberry, Apple}    2
{Strawberry}           1
Name: Fruit, dtype: int64

您可以对数据帧(1.1.0.)使用
pivot_表
value_计数

输出:

Apple  Strawberry
1      1             2
       0             2
0      1             1
或者,您可以使用:

df.groupby(['ID', 'Fruit']).size().unstack('Fruit', fill_value=0)\
.value_counts()

查找什么的总长度?如果将
EFG
更改为
ABC
,预期输出是什么?然后组
ABC
匹配与否?我更新了所需的输出如果
ID
有苹果和草莓以外的水果怎么办?当一个
ID
的水果
Apple
草莓
和其他水果在同一组时,应该输出什么?谢谢@jezrael!如果我想找到一个水果的总ID的总长度,我可以将
v
更改为苹果或草莓?@Mick-yop,只需要
set(x)=set(v)
@Mick-如果所有值总是
apple
草莓
水果
如果我使用
set(x)=set(v)会发生什么
?@jezrael-编辑部分应为.agg(frozenset)-这允许set对象是不可变的。
df.pivot_table(index='ID', columns='Fruit', aggfunc='size', fill_value=0)\
.value_counts()
Apple  Strawberry
1      1             2
       0             2
0      1             1
df.groupby(['ID', 'Fruit']).size().unstack('Fruit', fill_value=0)\
.value_counts()