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

如何用Pandas按ID分组将列转换为计数统计?

Pandas按ID分组统计多类别计数实现方案

原始数据

假设你的初始DataFrame如下:

import pandas as pd

df = pd.DataFrame({
    'ID': ['aaa', 'aaa', 'aaa', 'bbb', 'bbb', 'ccc'],
    'sex': ['M', 'M', 'F', 'F', 'M', 'F'],
    'est': ['S', 'C', 'D', 'D', 'C', 'C']
})

对应的表格形式:
| |ID |sex|est|
| 0 |aaa| M | S |
| 1 |aaa| M | C |
| 2 |aaa| F | D |
| 3 |bbb| F | D |
| 4 |bbb| M | C |
| 5 |ccc| F | C |

目标结果

需要得到按ID分组,统计sex(M、F)和est(S、C、D)各类别的计数:
| |ID | M | F | S | C | D |
| 0 |aaa| 2 | 1 | 1 | 1 | 1 |
| 1 |bbb| 1 | 1 | 0 | 1 | 1 |
| 2 |ccc| 0 | 1 | 0 | 1 | 0 |

实现方法

方法一:分表统计后合并(直观清晰)

通过两次pivot_table分别统计sex和est的分组计数,再合并结果:

# 统计每个ID下各sex的数量
sex_counts = df.pivot_table(index='ID', columns='sex', aggfunc='size', fill_value=0)
# 统计每个ID下各est的数量
est_counts = df.pivot_table(index='ID', columns='est', aggfunc='size', fill_value=0)
# 合并两个统计结果,重置索引
result = pd.concat([sex_counts, est_counts], axis=1).reset_index()
# 调整列顺序匹配目标格式(可选)
result = result[['ID', 'M', 'F', 'S', 'C', 'D']]

方法二:哑变量转码后分组求和(高效简洁)

利用get_dummies将类别列转为0-1哑变量,再按ID分组求和,适合大数据量场景:

# 对sex和est列生成哑变量,自动拆分多类别
dummy_df = pd.get_dummies(df, columns=['sex', 'est'])
# 按ID分组求和,得到各类别计数
result = dummy_df.groupby('ID').sum().reset_index()
# 移除列名前缀(可选,让列名更简洁)
result.columns = [col.replace('sex_', '').replace('est_', '') for col in result.columns]
# 调整列顺序匹配目标格式
result = result[['ID', 'M', 'F', 'S', 'C', 'D']]

两种方法都能高效处理大数据量,不需要手动操作,最终输出结果与目标一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:31:13