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

如何在Pandas分组数据中统计name字段的重复出现次数?

分组统计DataFrame内name的出现次数并添加新列

原DataFrame数据

d = {'id_1': [1, 1, 1, 1, 1, 2, 2, 2, 2, 2], 
     'id_2': [50, 50, 25, 25, 25, 4, 4, 4, 5, 5],
    'name': ['Kim', 'Kim', 'Kim', 'Kim', 'Mike', 'Kim', 'Saul', 'Saul', 'Kim', 'Kim']}
df = pd.DataFrame(data=d)

对应表格:

id_1id_2name
150Kim
150Kim
125Kim
125Kim
125Mike
24Kim
24Saul
24Saul
25Kim
25Kim

需求

按id_1和id_2分组,生成新列output显示每个分组内name值的出现次数,预期输出如下:

id_1id_2nameoutput
150Kim2
150Kim2
125Kim2
125Kim2
125Mike1
24Kim1
24Saul2
24Saul2
25Kim2
25Kim2

问题分析

你之前尝试的代码:

df.groupby(['id_1', 'id_2']).size() 
   .sort_values(ascending=False) 
   .reset_index(name='count')

仅统计了每个(id_1, id_2)分组的总记录数,而非分组内每个name的出现次数,因此无法得到预期结果。

解决方案

方法一:使用transform直接添加列(推荐)

同时按id_1、id_2、name分组,通过transform将统计结果映射回原DataFrame的每一行:

df['output'] = df.groupby(['id_1', 'id_2', 'name'])['name'].transform('count')

transform('count')会计算每个分组的行数(即该name在对应(id_1, id_2)组内的出现次数),并自动匹配到原DataFrame的对应行。

方法二:先统计次数再合并

先分组统计次数,再通过merge合并回原DataFrame:

# 统计每个(id_1, id_2, name)组合的出现次数
count_df = df.groupby(['id_1', 'id_2', 'name']).size().reset_index(name='output')
# 合并到原DataFrame
df = df.merge(count_df, on=['id_1', 'id_2', 'name'])

两种方法均可得到符合预期的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:20:38