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

求助:如何将Pandas分组聚合结果转为传统DataFrame格式?

解决分组聚合后转换为「传统」DataFrame格式的问题

我懂你这种困惑!有时候分组聚合后得到的结果带着MultiIndex,看起来不像常规的DataFrame,确实容易懵。咱们一步步来解决这个问题:

首先先确认你的原始数据和场景:

import pandas as pd
df = pd.DataFrame({
    'col1':['A','A','A','A','B','B','B','A','C','C','C'],
    'col2':['foo','zzz','bar','foo','car','car','dog','bar','bar','zzz','bar']
})

你想要统计每个(col1, col2)组合的出现频率,并且结果是结构清晰的「传统」三列DataFrame(包含col1、col2、Frequency字段)。


方法一:用size() + reset_index()(最简洁推荐)

size()会直接统计每个分组的行数(也就是你要的频率),再通过reset_index()把分组的索引(col1和col2)转成普通列,同时给统计结果列命名:

frequency_df = df.groupby(['col1', 'col2']).size().reset_index(name='Frequency')
print(frequency_df)

输出的就是标准DataFrame格式:

col1 col2  Frequency
0    A  bar          2
1    A  foo          2
2    A  zzz          1
3    B  car          2
4    B  dog          1
5    C  bar          2
6    C  zzz          1

方法二:用命名聚合agg() + 重置索引(兼容多聚合场景)

如果需要同时执行多种聚合操作,推荐用pandas 1.0+支持的命名聚合语法,清晰指定列名和聚合函数,最后同样用reset_index()转换格式:

frequency_df = df.groupby(['col1', 'col2']).agg(Frequency=('col1', 'count')).reset_index()

这个方法的输出和方法一完全一致,优势是可以扩展添加更多聚合列(比如同时统计均值、最大值等)。


为什么你之前的代码可能出问题?

如果你的代码用了旧版的字典式agg语法(已被弃用):

# 旧语法(不推荐使用)
old_result = df.groupby(['col1','col2'])['col1'].agg({'Frequency': 'count'})

此时得到的结果是一个以(col1, col2)为MultiIndex的DataFrame,只有Frequency一列,看起来不符合「传统」格式。这时候只要执行old_result.reset_index(),就能把MultiIndex转成普通列,得到你想要的结构。


核心总结:分组聚合后,只要调用reset_index(),就能把分组键从索引转换为普通列,轻松得到结构清晰的常规DataFrame!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:21:19