如何合并多个Pandas GroupBy对象实现统一迭代处理
合并多个Pandas GroupBy对象的实现方案
Pandas的GroupBy对象原生支持迭代,每次迭代返回(分组标签, 分组DataFrame)格式的元组,因此可以直接通过Python标准库的迭代器拼接工具实现需求,不需要额外依赖。
最简实现方案
用itertools.chain.from_iterable直接拼接多个GroupBy的迭代器:
import itertools def concat_groupbys(groupby_list): return itertools.chain.from_iterable(groupby_list)
调用示例
完全匹配需求的调用逻辑:
import pandas as pd import numpy as np # 构造测试数据 df = pd.DataFrame({'A':np.random.random(20), 'B':np.random.random(20), 'date':pd.date_range("2021-05-01",periods = 20, freq='2W')}) # 生成两个独立GroupBy对象 groups_1 = df.loc[df.date<'2021-11-01',:].groupby(pd.Grouper(key='date', freq='M')) groups_2 = df.loc[df.date>='2021-11-01',:].groupby(pd.Grouper(key='date', freq='2W')) # 合并分组 groups = concat_groupbys([groups_1, groups_2]) # 单次遍历处理所有分组 for label, group in groups: # 此处编写分组处理逻辑 print(f"分组标签: {label}, 分组数据量: {len(group)}")
注意事项
- 迭代器默认只能遍历一次,如果需要多次复用合并后的分组,可将结果转为列表存储:
groups = list(concat_groupbys([groups_1, groups_2])) - 该方法采用惰性计算,仅在迭代时才会生成对应分组的数据,内存开销极低,适合处理大规模数据集。
内容的提问来源于stack exchange,提问作者Gene Burinsky
相关产品推荐
相关产品推荐

