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

如何在Python的Pandas中统计分类列各值按ID分组的出现次数?

Pandas分组统计CAT值次数并重塑列格式

原始数据

ID CAT
1  A
1  B
1  A
2  A
2  B
2  A
1  B
1  A

需求目标

按ID分组,将CAT列中A、B的出现次数分别转为CAT_A_NUM、CAT_B_NUM列,最终输出如下格式:

ID CAT_A_NUM CAT_B_NUM
1  3         2
2  2         1

你的尝试与优化方案

你用pivot_table的思路是正确的,只是缺少列名调整和索引重置步骤,导致格式不符合预期。以下是两种可行的解决方法:

方法1:优化pivot_table实现

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'ID': [1,1,1,2,2,2,1,1],
    'CAT': ['A','B','A','A','B','A','B','A']
})

# 分组统计次数,fill_value=0确保空值显示为0
pivot_result = df.pivot_table(index='ID', columns='CAT', aggfunc='size', fill_value=0)
# 重命名列名,匹配需求格式
pivot_result.columns = [f'CAT_{col}_NUM' for col in pivot_result.columns]
# 重置索引,让ID从索引转为普通列
final_result = pivot_result.reset_index()

print(final_result)

输出结果:

ID  CAT_A_NUM  CAT_B_NUM
0   1          3          2
1   2          2          1

方法2:使用crosstab(更简洁)

pd.crosstab专门用于计算分组频数,用这个方法可以快速完成统计,再调整列名即可:

crosstab_result = pd.crosstab(df['ID'], df['CAT'])
crosstab_result.columns = [f'CAT_{col}_NUM' for col in crosstab_result.columns]
final_result = crosstab_result.reset_index()

print(final_result)

输出结果和方法1完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:30:44