You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas DataFrame按id分组统计name列唯一值数量结果不一致问题

不一致原因
  1. 执行完第一次分组聚合代码后,你得到的新df仅包含id、unique两列,原始name列已经被聚合掉不存在了。如果你的代码没有触发KeyError: 'name'报错,说明你后续执行nunique()统计时调用的是未做第一次分组的原始表,统计的是原始表中每个id的name唯一值,而非第一次分组后的结果。
  2. 如果你是误对unique列执行nunique()统计:pandas的nunique()会把列中的每个元素当作单独个体计数,而unique列的每个元素是存了多个值的数组,单个数组会被识别为一个唯一值,最终得到的结果都是1,自然和数组内部的元素长度不符。
解决方法

你不需要分两次分组操作,一次分组聚合即可直接得到预期结果:

result = df.groupby('id', as_index=False)['name'].agg(
    unique = lambda x: x.unique().tolist(),
    count = 'nunique'
)

如果已经生成了带unique列的分组结果,直接计算unique列每个元素的长度即可得到计数:

# 沿用你已有的分组代码
df = df.groupby('id')['name'].agg(['unique']).reset_index()
# 新增count列
df['count'] = df['unique'].apply(len)

内容的提问来源于stack exchange,提问作者user3447653

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:45:04