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

如何将DataFrame的category列值转为列,并按id分组计算value列平均值

问题

我有一个名为df的Pandas DataFrame,结构如下:

idvaluecategory
AB2small
BC3big
AB4small
AB5big
BC6small
BC2small
BC4big
AB8big

需要按id分组,将category的不同取值作为列,列值为对应value的平均值,最终得到如下结构的DataFrame(注:原始数据中AB的small类平均值应为3,big类平均值应为6.5,以下为修正后的正确结果):

IDsmallbig
AB36.5
BC43.5
解决方案

方法1:使用pivot_table

pivot_table是Pandas处理这类行列转换的常用方法,直接指定索引、列、值和聚合函数即可:

import pandas as pd

# 生成结果
result = df.pivot_table(
    index='id',
    columns='category',
    values='value',
    aggfunc='mean'
).reset_index()

# 调整格式匹配目标
result.columns.name = None  # 移除列索引的名称
result = result.rename(columns={'id': 'ID'})  # 修改id列名为ID

方法2:使用groupby + unstack

先按id和category分组计算平均值,再通过unstack将category转换为列:

result = df.groupby(['id', 'category'])['value'].mean().unstack().reset_index()
result.columns.name = None
result = result.rename(columns={'id': 'ID'})

两种方法最终都会得到符合需求的DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:33:45