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

分组聚合后如何获取分组列?Pandas分组结果列访问问题

解决分组后无法访问分组列的问题

你遇到的问题很典型——分组后key2变成了DataFrame的索引,而不是普通列,所以直接用a['key2']会触发KeyError。这里有两种简单的解决办法:

方法1:分组时直接保留分组列为普通列

在groupby里添加as_index=False参数,这样分组后的结果不会把key2设为索引,而是保留成可直接访问的列:

import pandas as pd

# 你的原始DataFrame
df = pd.DataFrame({
    'data1': [-1.986321, 0.169566, -1.019771, 0.631865, -0.487121],
    'data2': [-0.873129, -1.503761, -0.095008, -0.158880, 0.643491],
    'key1': ['a', 'a', 'b', 'b', 'a'],
    'key2': ['one', 'two', 'one', 'two', 'on']
})

# 用as_index=False分组求和
a = df['data1'].groupby(df['key2'], as_index=False).sum()
# 现在可以直接访问key2列
print(a['key2'])

执行后得到的DataFrame结构是:

key2     data1
0   on -0.487121
1  one -2.996092
2  two  0.801431

方法2:将已有的索引转换为普通列

如果已经得到了以key2为索引的DataFrame,可以用reset_index()方法把索引转成普通列:

# 你原来的代码
a = df['data1'].groupby(df['key2']).sum()
a = pd.DataFrame(a)
# 重置索引,把key2转为列
a = a.reset_index()
# 现在可以访问key2列了
print(a['key2'])

处理后的DataFrame结构和方法1一致,key2成为了可直接访问的列。

简单总结下:as_index=False适合在分组时一步到位,reset_index()适合处理已经生成的索引型结果,两种方法都能解决你的问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 07:03:46