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

Python分组统计唯一值并保存至新列的问题排查与实现

解决分组统计唯一值并生成counts列的问题

问题分析

使用transform('nunique')得到全NaN,大概率是因为分组列(A、B)中存在缺失值(NaN)——pandas的groupby默认会排除包含NaN的分组,导致这部分行无法匹配到统计结果,最终填充为NaN。而直接调用nunique()时,默认也不会显示包含NaN的分组,所以你能看到的是有效分组的统计值。

可行解决方案

方案1:处理分组列的缺失值(推荐)

如果分组列的NaN是无效数据,先清理缺失值:

# 删除A/B列含NaN的行
df_clean = df.dropna(subset=["A", "B"])
# 生成counts列
df_clean['counts'] = df_clean.groupby(["A","B"])["C"].transform('nunique')

如果NaN是有意义的(比如代表"未知"分组),可以先填充标识值:

# 将A/B列的NaN替换为"Unknown"
df[["A", "B"]] = df[["A", "B"]].fillna("Unknown")
df['counts'] = df.groupby(["A","B"])["C"].transform('nunique')

方案2:用merge关联统计结果

如果不想处理缺失值,可以先生成带列名的统计结果,再合并回原表:

# 统计并设置列名
group_counts = df.groupby(["A","B"])["C"].nunique().reset_index(name='counts')
# 合并回原表,保留所有行(含分组列有NaN的行)
df = df.merge(group_counts, on=["A","B"], how='left')

这种方式会把原表中无法匹配分组的行的counts设为NaN,你可根据需求后续处理这些值。

方案3:升级pandas版本(针对旧版本bug)

如果你的pandas版本低于1.3.0,transform('nunique')可能存在兼容性问题,升级到最新稳定版即可解决:

pip install --upgrade pandas

后续排名操作示例

生成counts列后,按组对唯一值数量排名可参考以下代码:

# 按A、B分组,对counts列降序排名(相同值取相同排名)
df['rank'] = df.groupby(["A","B"])['counts'].rank(method='dense', ascending=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:17:20