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

Pandas分组统计后如何将category转为列,实现每个唯一id对应单行数据

需求可行性说明

该需求完全可以实现,属于pandas常规的长表转宽表操作,你通过groupby得到的是两层索引的聚合长表,仅需几行代码即可转换为目标的单id单行结构。

具体实现方法

你当前拿到的df.groupby(['ids','category'])['counts'].sum()输出是带有ids、category两层行索引的Series对象,推荐两种适配性极强的实现方式:

  • 方法1:直接基于现有groupby结果调用unstack()转换,代码最简洁
# 将category层索引转为列,缺失分类值自动填0
wide_df = df.groupby(['ids','category'])['counts'].sum().unstack(fill_value=0)
# 给列名统一加_n后缀
wide_df.columns = [f"{c}_n" for c in wide_df.columns]
# 将ids从索引还原为普通列,方便后续和其他表合并
wide_df = wide_df.reset_index()

执行后输出的结果和你给出的目标格式完全一致,没有对应分类记录的位置会自动填充0。

  • 方法2:使用pivot_table直接生成宽表,逻辑更直观,不需要处理groupby返回的多层索引
import pandas as pd

wide_df = pd.pivot_table(
    df,
    index="ids",
    columns="category",
    values="counts",
    aggfunc="sum",
    fill_value=0
)
wide_df.columns = [f"{c}_n" for c in wide_df.columns]
wide_df = wide_df.reset_index()

补充说明:两种方法的fill_value=0参数是关键,会自动把id没有对应分类的空缺位置补为0,不需要额外调用fillna()做二次处理,转换完成后可直接用ids字段作为关联键和其他数据表做合并操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:48:18