Python 3.x 如何查找另一列在不同行中具有多个值的列值的总长度
有没有办法找到同时包含苹果和草莓的ID,然后找到总长度?只有苹果的ID和只有草莓的ID df: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
:
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()