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

pandas如何按ID分组统计各Type值的出现次数

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

以下代码可直接运行,最终输出完全匹配你需要的ID、a_count、b_count三列结果:

1. 数据读取

首先读取本地Excel文件,将代码中的路径替换为你实际的文件存储路径即可:

import pandas as pd
# 读取Excel源数据
df = pd.read_excel("你的数据文件实际路径.xlsx")

# 测试用样例数据(和你描述的原始数据完全一致,可用于提前验证逻辑)
# df = pd.DataFrame({
#     "ID": [1,1,1,2,2],
#     "Type": ["a","a","b","a","b"]
# })

2. 分组统计实现

方法一:交叉表实现(写法最简洁,适配固定分类计数场景)

# 按ID维度统计不同Type值的出现次数
result = pd.crosstab(index=df["ID"], columns=df["Type"])
# 重命名列匹配要求的输出格式
result.columns = [f"{col}_count" for col in result.columns]
# 将ID从索引还原为普通数据列
result = result.reset_index()

方法二:groupby原生写法(匹配你原本想用groupby的实现思路)

之前调用groupby无法得到预期结果,通常是因为分组计数后没有将分类值从行索引展开为列,正确写法如下:

# 分组后对Type列做值计数,再将分类值展开为列,缺失值填充0
result = df.groupby("ID")["Type"].value_counts().unstack(fill_value=0)
result.columns = [f"{col}_count" for col in result.columns]
result = result.reset_index()

输出结果验证

两种方法执行后输出的result内容完全符合预期:

IDa_countb_count
121
211

补充说明:如果后续Type字段新增其他分类值,上述代码会自动生成对应分类的count列,无需手动修改统计逻辑;如果只需要统计a、b两类的计数,在得到结果后筛选保留对应三列即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:27:10