You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过循环将大型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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 20:36:06