按唯一ID拆分多Dataframe生成含多Sheet的Excel文件问题
解决方法
你的问题核心是没针对每个ID分别去三个DataFrame里筛选对应记录,而是复用了df_1分组后的结果,导致无法正确导出另外两个DF的目标数据。下面是可行的实现方案:
实现思路
- 先整理出所有需要处理的唯一ID(可选覆盖三个DF中所有出现过的ID,或仅保留三个DF共有的ID)
- 遍历每个ID,分别从三个DF中筛选出该ID的对应行
- 用
pd.ExcelWriter将三个筛选结果写入同一个Excel文件的不同工作表
完整代码示例
import pandas as pd # 假设你的三个DataFrame为df_1、df_2、df_3 # 方式1:获取三个DF中所有出现过的唯一ID unique_ids = pd.concat([df_1['ID'], df_2['ID'], df_3['ID']]).unique() # 方式2:仅保留三个DF都存在的ID(按需切换) # unique_ids = set(df_1['ID']).intersection(df_2['ID'], df_3['ID']) for id_val in unique_ids: # 精准筛选当前ID在三个DF中的记录 df1_target = df_1[df_1['ID'] == id_val] df2_target = df_2[df_2['ID'] == id_val] df3_target = df_3[df_3['ID'] == id_val] # 用with语句自动管理Excel写入器,无需手动save with pd.ExcelWriter(f'{id_val}.xlsx', engine='openpyxl') as writer: df1_target.to_excel(writer, sheet_name='DF_1', index=False) df2_target.to_excel(writer, sheet_name='DF_2', index=False) df3_target.to_excel(writer, sheet_name='DF_3', index=False)
关键细节说明
- 布尔索引
df['ID'] == id_val能精准定位目标ID的记录,避免导出全部数据 - 使用
with语句管理ExcelWriter,代码更简洁且能自动释放资源 - 工作表名称可根据需求修改,比如改成
f'{id_val}_DF1'这类格式
内容的提问来源于stack exchange,提问作者Kasper
相关产品推荐
相关产品推荐

