You need to enable JavaScript to run this app. Pandas按id分组生成多个独立DataFrame的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

Pandas按id分组生成多个独立DataFrame的实现方法

Pandas 按未知数量的唯一id分组生成独立子DataFrame的通用方案

不需要提前统计原始DataFrame里唯一id的总数量,直接利用pandas.groupby()的原生能力即可实现全流程通用适配,具体实现如下:

  • 第一步:基于原始sample DataFrame执行分组操作
    # 按id字段生成分组对象,sort=False 保留原始数据的行出现顺序,避免默认排序打乱原顺序
    grouped = sample.groupby('id', sort=False)
    
  • 第二步:遍历分组对象存储所有子DataFrame
    groupby返回的分组对象本身就会自动识别所有唯一id、切分好对应的数据块,完全不需要提前知道分组总数,可根据使用习惯选择两种存储方案:
    1. 推荐方案:用字典存储子表
      以id值为键、对应子DataFrame为值存入字典,后续查找、调用子表时非常直观:
      sub_df_map = {group_key: group_df for group_key, group_df in grouped}
      
      比如需要获取id为3877的子表,直接调用sub_df_map[3877]即可拿到包含两行同id记录的独立子DataFrame,无论数据里有多少个唯一id,这个逻辑都不需要修改。
    2. 按需方案:按顺序生成df1、df2…形式的零散变量
      如果你确实需要和示例中df1、df2命名规则一致的零散子表,可以通过遍历序号动态绑定变量(注意这种方式不适合生产场景,因为动态生成的全局变量容易引发作用域混乱、后续维护成本高):
      # 从df1开始按出现顺序绑定每个子表
      for seq, (_, group_df) in enumerate(grouped, start=1):
          globals()[f'df{seq}'] = group_df
      

注意事项

  • 不要省略sort=False参数:groupby默认会按照分组键的数值大小排序,加上这个参数后,子表的顺序和原始数据中第一次出现对应id的顺序完全一致,和你示例里df1到df9的排序逻辑匹配。
  • 你样本中shcool_id存在拼写偏差(正确拼写为school_id),不影响分组逻辑,可按需修正。

内容的提问来源于stack exchange,提问作者a1234

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 00:24:04