分组聚合后如何获取分组列?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
相关产品推荐
相关产品推荐

