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

如何基于DataFrame中的唯一ID值批量创建对应子DataFrame?

按唯一ID拆分Pandas DataFrame为多个子DataFrame

需求

将包含多个ID值的Pandas DataFrame,按每个唯一ID生成对应新DataFrame,新DataFrame名称为「ID值_df」,并筛选出对应ID的所有记录。

示例数据

ID      Date      Score  DateTime
0  1000    1/1/2022  38     2022-01-01 12:09:00
1  5000    1/1/2022  78     2022-01-01 10:07:00
2  1000    1/1/2022  92     2022-01-01 02:07:00
3  3000    1/1/2022  73     2022-01-01 02:02:00
4  3000    1/1/2022  98     2022-01-01 11:12:00

尝试的伪代码

unique_id = df['ID'].unique()

for x in unique_id:
    unique_df = x + "_df"
    
    i = 0
    while i < len(unique_df):
        unique_df = df.unique_df[i]
        i = i + 1

预期结果

print(1000_df)

   ID      Date      Score  DateTime
0  1000    1/1/2022  38     2022-01-01 12:09:00
2  1000    1/1/2022  92     2022-01-01 02:07:00

print(3000_df)

   ID      Date      Score  DateTime
3  3000    1/1/2022  73     2022-01-01 02:02:00
4  3000    1/1/2022  98     2022-01-01 11:12:00

...

正确实现方式

方法1:生成全局变量(直接得到类似1000_df的变量)

通过globals()函数动态创建全局变量,直接生成需求中的命名格式:

import pandas as pd

# 构造示例DataFrame(实际使用时替换为你的原始df)
data = {
    'ID': [1000, 5000, 1000, 3000, 3000],
    'Date': ['1/1/2022']*5,
    'Score': [38,78,92,73,98],
    'DateTime': ['2022-01-01 12:09:00', '2022-01-01 10:07:00', '2022-01-01 02:07:00', '2022-01-01 02:02:00', '2022-01-01 11:12:00']
}
df = pd.DataFrame(data)

# 获取所有唯一ID
unique_ids = df['ID'].unique()

# 循环创建子DataFrame
for id_val in unique_ids:
    df_name = f"{id_val}_df"
    # 筛选对应ID的数据并赋值给全局变量
    globals()[df_name] = df[df['ID'] == id_val]

执行后可直接调用1000_df、3000_df等变量查看对应数据。

方法2:用字典存储(更规范,避免全局变量混乱)

如果不希望生成大量零散全局变量,推荐用字典统一存储所有子DataFrame:

id_dfs = {}
for id_val in unique_ids:
    id_dfs[f"{id_val}_df"] = df[df['ID'] == id_val]

# 调用方式:通过字典键访问
print(id_dfs['1000_df'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:50:17