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

如何将DF2周度数据按月份新增工作表到DF1导出的对应Excel文件

Pandas分月导出多工作表Excel实现方案

错误原因说明

你之前嵌套循环导出出错的核心原因有两个:

  • 嵌套循环时没有对df2做当前循环月份的条件筛选,导致全量df2数据被写入每个文件
  • 原始代码的ExcelWriter初始化和save方法位置存在缩进错误,会导致文件覆盖或只写入单条数据

完整实现代码

场景1:一次性生成包含两个工作表的全量Excel文件

适合还未生成df1单独Excel的场景,逻辑更简洁,性能更高:

import pandas as pd

# 取两个DataFrame共同的月份交集,避免出现df2没有对应月份的异常
common_months = list(set(df1['month'].unique()) & set(df2['month'].unique()))

for month in common_months:
    # 每个月份初始化一个独立的ExcelWriter对象
    output_file = pd.ExcelWriter(f'{month}.xlsx', engine='xlsxwriter')
    # 写入df1对应月份的Course工作表
    df1[df1['month'] == month].to_excel(output_file, sheet_name='Course', index=False)
    # 写入df2对应月份的周度工作表
    df2[df2['month'] == month].to_excel(output_file, sheet_name='Weekly', index=False)
    # 全部工作表写入完成后再保存文件
    output_file.save()

场景2:已有df1导出的Excel文件,仅追加周度工作表

如果已经生成了仅包含Course表的Excel,不需要重新导出df1数据,可以用openpyxl引擎追加写入:

import pandas as pd
from openpyxl import load_workbook

common_months = df1['month'].unique()
for month in common_months:
    file_path = f'{month}.xlsx'
    # 匹配当前月份的df2数据
    df2_month = df2[df2['month'] == month]
    # 以追加模式打开已有Excel,重复sheet会自动替换
    with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='replace') as writer:
        df2_month.to_excel(writer, sheet_name='Weekly', index=False)

同月份多周分工作表实现

如果需要把同月份的不同周数据拆成独立工作表,只需要在循环内层加周度筛选逻辑即可:

for month in common_months:
    output_file = pd.ExcelWriter(f'{month}.xlsx', engine='xlsxwriter')
    df1[df1['month'] == month].to_excel(output_file, sheet_name='Course', index=False)
    # 筛选当前月份的所有周数据
    df2_month = df2[df2['month'] == month]
    # 按周列拆分写入不同工作表
    for week in df2_month['week'].unique():
        df2_week = df2_month[df2_month['week'] == week]
        df2_week.to_excel(output_file, sheet_name=f'Week_{week}', index=False)
    output_file.save()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:24:00