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

Pandas groupby返回DataFrameGroupBy对象,如何生成目标DataFrame?

如何将Pandas的DataFrameGroupBy对象转换为目标格式的DataFrame?

嘿,这个问题我之前也碰到过!你现在得到pandas.core.groupby.DataFrameGroupBy对象是因为groupby()本身只是创建了分组规则,并没有对数据做聚合或重塑操作,所以还不是最终的DataFrame。咱们一步步来解决:

首先看你的原始数据:

Flavor       MONTH      Score
6   Vanilla  March_2018  2.941176
7  Chocolate March_2018  7.692308
8     Banana March_2018  0.000000
23 Strawberry March_2018 20.000000

你执行的Score_df = df1.groupby(['Flavor','MONTH'])只是告诉Pandas要按Flavor和MONTH分组,但没说要对分组后的Score做什么操作,所以返回的是分组对象而非DataFrame。要得到你期望的格式,需要加上聚合操作并调整结构,这里有两种简单的方法:

方法一:groupby聚合 + unstack重塑

因为你的每个(Flavor, MONTH)组合只有一个Score值,我们可以先取每个分组的第一个(也是唯一的)Score值,再把MONTH转为列:

Score_df = df.groupby(['Flavor', 'MONTH'])['Score'].first().unstack()

运行后得到的结果就是你想要的DataFrame:

MONTH      March_2018
Flavor               
Banana        0.000000
Chocolate     7.692308
Strawberry   20.000000
Vanilla       2.941176

方法二:直接用pivot(更直观)

如果你的数据中每个(Flavor, MONTH)确实只有一条记录,用pivot可以一步到位,直接指定索引、列和值:

Score_df = df.pivot(index='Flavor', columns='MONTH', values='Score')

这个方法和上面的结果完全一致,而且代码更简洁,适合这种一对一映射的场景。

总结一下:groupby()只是分组的第一步,必须配合聚合函数(比如first()、sum()、mean()等)才能生成DataFrame,再根据需要用unstack()调整结构;或者直接用pivot跳过分组步骤,直接得到目标格式。

内容的提问来源于stack exchange,提问作者florence-y

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:29:56