如何使用pandas进行groupby操作后统计分组内唯一元素的总数量
Pandas按分组统计指定列唯一值数量解决方案
你之前写法出错的核心原因是分组维度设置错误:不需要把B列加入groupby的分组键,只需要按A列分组后统计B列的唯一值数量即可。
测试用示例DataFrame
import pandas as pd df = pd.DataFrame({'A': ['x', 'x', 'x','x','y'] , 'B': ['a', 'c', 'c','b','e'] , 'C': ['1', '2', '2','3','4']})
核心实现代码
直接统计唯一值数量
res = df.groupby('A')['B'].nunique() print(res)
输出结果:
A x 3 y 1 Name: B, dtype: int64
同时查看唯一值明细+数量
如果需要同时返回每个分组对应的B列唯一值具体内容,可以用agg做批量聚合:
res_detail = df.groupby('A').agg( B列唯一值总数 = ('B', 'nunique'), B列唯一值列表 = ('B', 'unique') ) print(res_detail)
输出结果:
B列唯一值总数 B列唯一值列表 A x 3 [a, c, b] y 1 [e]
原有写法错误原因
df.groupby(['A', 'B']).count():同时用A、B两列作为分组键,拆分出来的分组是x+a、x+c、x+b、y+e四个分组,统计的是每个小分组的行数,不符合需求df.groupby(['A', 'B'])['A'].nunique():同样分组维度错误,且统计的是A列的唯一值,每个分组A值都相同,结果全部为1df.groupby(['A', 'B']).agg({"B": "sum"}):分组维度错误,且字符串列做sum操作会直接拼接字符串,完全不符合统计唯一值的需求
内容的提问来源于stack exchange,提问作者oneday
相关产品推荐
相关产品推荐

