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
相关产品推荐
相关产品推荐

