Pandas按id分组生成多个独立DataFrame的实现方法
Pandas 按未知数量的唯一
id分组生成独立子DataFrame的通用方案 不需要提前统计原始DataFrame里唯一id的总数量,直接利用pandas.groupby()的原生能力即可实现全流程通用适配,具体实现如下:
- 第一步:基于原始
sampleDataFrame执行分组操作# 按id字段生成分组对象,sort=False 保留原始数据的行出现顺序,避免默认排序打乱原顺序 grouped = sample.groupby('id', sort=False) - 第二步:遍历分组对象存储所有子DataFrame
groupby返回的分组对象本身就会自动识别所有唯一id、切分好对应的数据块,完全不需要提前知道分组总数,可根据使用习惯选择两种存储方案:- 推荐方案:用字典存储子表
以id值为键、对应子DataFrame为值存入字典,后续查找、调用子表时非常直观:
比如需要获取id为3877的子表,直接调用sub_df_map = {group_key: group_df for group_key, group_df in grouped}sub_df_map[3877]即可拿到包含两行同id记录的独立子DataFrame,无论数据里有多少个唯一id,这个逻辑都不需要修改。 - 按需方案:按顺序生成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
相关产品推荐
相关产品推荐

