如何遍历Pandas中按两列分组求和后的groupby对象?
遍历Pandas分组聚合结果的几种方法
没问题!其实遍历Pandas的GroupBy对象或者聚合后的结果非常简单,我结合你的场景给你几种实用的方案:
先给个示例上下文(方便对应你的代码)
先明确下常见的分组求和代码,方便后续举例:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'Category1': ['A', 'A', 'B', 'B', 'A'], 'Category2': ['X', 'Y', 'X', 'Y', 'X'], 'Value': [15, 25, 30, 40, 10] }) # 按两列分组并对第三列求和,得到带多级索引的Series groupby_abundance = df.groupby(['Category1', 'Category2'])['Value'].sum()
方法1:遍历聚合后的结果(最常用)
如果groupby_abundance是你已经求和后的结果(多级索引Series),可以用items()方法遍历每个分组的键和对应求和值:
for (cat1, cat2), sum_val in groupby_abundance.items(): print(f"分组键:({cat1}, {cat2}),求和结果:{sum_val}")
输出会是:
分组键:(A, X),求和结果:25 分组键:(A, Y),求和结果:25 分组键:(B, X),求和结果:30 分组键:(B, Y),求和结果:40
这里的键是一个元组,对应你分组的两列的取值组合。
方法2:遍历未聚合的GroupBy对象
如果你还保留着未做聚合的GroupBy对象(比如只是groupby_obj = df.groupby(['Category1', 'Category2'])),可以直接遍历每个分组的子DataFrame:
groupby_obj = df.groupby(['Category1', 'Category2']) for (cat1, cat2), sub_df in groupby_obj: print(f"当前分组:({cat1}, {cat2})") print("分组对应的原始数据:") print(sub_df) # 也可以在遍历过程中计算求和 current_sum = sub_df['Value'].sum() print(f"该组求和结果:{current_sum}\n")
方法3:按指定分组键获取结果
如果你不需要遍历所有分组,只想获取某个特定分组的结果,可以用get_group()方法:
# 获取Category1='A'且Category2='X'的分组求和结果 target_group = groupby_abundance.get_group(('A', 'X')) print(target_group) # 输出:25
根据你的实际需求选对应的方法就好啦~
内容的提问来源于stack exchange,提问作者parth patel
相关产品推荐
相关产品推荐

