如何通过循环将大型dataframe按division和subdivision分组生成多个子dataframe
Pandas按双字段分组生成独立子DataFrame实现方法
- 优先推荐用字典存储子DataFrame,避免全局命名空间污染,也方便后续批量操作
import pandas as pd # 假设原始大表名为data data_group = data.groupby(['division', 'subdivision']) sub_dfs = {} # 要生成16个对应1-4的组合,range右边界为开区间,因此填写range(1,5) for i in range(1, 5): for j in range(1, 5): df_name = f"division_{i}_sub_{j}" sub_dfs[df_name] = data_group.get_group((i, j))
后续需要取用对应子表时,直接调用sub_dfs["division_1_sub_1"]即可,批量处理所有子表时直接遍历字典即可。
- 如果确实需要生成独立的全局变量,可以用
globals()方法实现
data_group = data.groupby(['division', 'subdivision']) for i in range(1, 5): for j in range(1, 5): df_name = f"division_{i}_sub_{j}" globals()[df_name] = data_group.get_group((i, j))
运行完成后可直接调用division_1_sub_1等独立变量。
- 异常兼容处理:避免不存在的分组报错
如果不能确定所有(i,j)分组都存在,可以提前校验分组是否存在再取值:
data_group = data.groupby(['division', 'subdivision']) exist_groups = set(data_group.groups.keys()) sub_dfs = {} for i in range(1, 5): for j in range(1, 5): group_key = (i, j) if group_key in exist_groups: df_name = f"division_{i}_sub_{j}" sub_dfs[df_name] = data_group.get_group(group_key) else: # 不存在的分组可根据需求选择跳过或者赋值空DF print(f"分组{i},{j}无对应数据,已跳过")
内容的提问来源于stack exchange,提问作者Lucas Ferreira Hillesheim
相关产品推荐
相关产品推荐

