Pandas调用.groups属性报DataFrame无该属性错误如何解决
问题根源
.groups是pandas GroupBy对象的专属属性,你代码里的test是普通DataFrame,自然会报属性不存在的错误。
你的写法在groupby选完目标列之后直接链式调用了.sum(),这个方法会立即执行聚合计算,返回聚合完成的带多级行索引的结果DataFrame,原本的GroupBy对象在这一步已经被消费,没有赋值给任何变量。
对应解决方式
- 如果你需要保留分组信息、后续还要遍历原始分组:把GroupBy对象单独赋值,不要直接链式接聚合函数
# 先实例化GroupBy对象,暂时不执行聚合 gb_obj = temp.groupby(['global company key','calendar year'])[['columnA','columnB', 'columnC']] # 此时调用.groups属性可正常返回分组信息 print(gb_obj.groups) # 聚合计算、遍历分组都基于这个GroupBy对象操作即可 agg_result = gb_obj.sum() # 拿到你之前要的汇总结果 for group_name, group_data in gb_obj: # 遍历每个原始分组 print(f"当前分组键:{group_name}") print(group_data)
- 如果你已经生成了聚合后的
test,只是想拿到所有分组键,不需要回溯分组原始数据:直接从结果的多级索引提取即可,不用重跑groupby逻辑
# 获取全部分组键,格式为(公司key, 年份)的元组列表 all_groups = test.index.tolist() # 遍历聚合后的每条分组结果 for (company_key, cal_year), row in test.iterrows(): print(company_key, cal_year, row['columnA'], row['columnB'], row['columnC'])
内容的提问来源于stack exchange,提问作者RogueGingerz
相关产品推荐
相关产品推荐

