如何基于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
相关产品推荐
相关产品推荐

