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

如何用Pandas的groupby按组统计列的唯一值数量并生成新列

解决方法:基于Groupby生成唯一值计数新列

看起来你需要按_a分组,统计每个组内_b的唯一值数量,再把这个计数对应到组内的每一行生成a_b_3列。结合你的示例数据,这里有两种简洁的实现方式:

方法一:使用transform直接生成列

transform方法可以帮我们在分组后计算统计值,并自动将结果广播到原DataFrame的每一行,非常适合这种场景:

import numpy as np
import pandas as pd

# 初始化你的DataFrame
df = pd.DataFrame({'_a':[1,1,1,2,2,3,3],'_b':[3,4,5,3,3,3,9]})

# 生成目标列a_b_3
df['a_b_3'] = df.groupby('_a')['_b'].transform('nunique')

# 查看结果
print(df)

运行后输出和你给出的示例完全一致:

_a _b a_b_3
0  1  3     3
1  1  4     3
2  1  5     3
3  2  3     1
4  2  3     1
5  3  3     2
6  3  9     2

代码解释:

  • df.groupby('_a')['_b']:按_a的取值对_b列进行分组
  • .transform('nunique'):对每个分组执行nunique()函数(统计该组内_b的唯一值数量),并将结果映射回原分组的每一行,这样每一行都会得到对应组的唯一值计数。

方法二:先统计分组结果再映射

如果你需要单独保存分组统计的结果,可以先计算每个_a对应的唯一值数量,再用map方法映射到原DataFrame:

import numpy as np
import pandas as pd

df = pd.DataFrame({'_a':[1,1,1,2,2,3,3],'_b':[3,4,5,3,3,3,9]})

# 先计算每个_a对应的_b唯一值数量
unique_counts = df.groupby('_a')['_b'].nunique()

# 将统计结果映射到原df的_a列,生成a_b_3
df['a_b_3'] = df['_a'].map(unique_counts)

print(df)

这个方法和transform的效果完全相同,只是把步骤拆分开了,适合需要复用分组统计结果的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:53:14