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

使用Pandas循环处理DataFrame生成带间隔行的Excel多报表

批量生成分组Excel报表解决方案

问题描述

需将大型DataFrame按唯一id分组,每个分组生成一份匹配指定模板的报表,报表之间用空行分隔。希望通过循环实现,避免编写大量硬编码的元素映射代码。

原代码

import pandas as pd

data = {'id': [1,2,3]
  , 'make': ['ford','chevrolet','dodge']
  , 'model': ['mustang','comaro','challenger']
  , 'year': ['1969','1970','1971']
  , 'color': ['blue', 'red', 'green']
  , 'miles': ['15000','20000','35000']
  , 'seats': ['leather', 'cloth' , 'leather']
  }
df = pd.DataFrame(data)

df.to_excel(r'/desktop/reports/output1.xlsx')

期望输出格式

每个id对应两行报表数据,分组间空一行分隔:

A       B             C       D        E        F 
1 make    ford          year    1969     miles    15000
2 model   mustang       color   blue     seats    leather
3 
4 make    chevrolet     year    1970     miles    20000
5 model   comaro        color   red      seats    cloth
6
7 make    dodge         year    1971     miles    35000
8 model   challenger    color   green    seats    leather

解决方案代码

使用openpyxl直接操作Excel工作表,通过循环遍历每个分组,动态构造报表行并写入,自动添加分隔空行:

import pandas as pd
from openpyxl import Workbook

data = {'id': [1,2,3]
  , 'make': ['ford','chevrolet','dodge']
  , 'model': ['mustang','comaro','challenger']
  , 'year': ['1969','1970','1971']
  , 'color': ['blue', 'red', 'green']
  , 'miles': ['15000','20000','35000']
  , 'seats': ['leather', 'cloth' , 'leather']
  }
df = pd.DataFrame(data)

# 初始化Excel工作簿和工作表
wb = Workbook()
ws = wb.active
current_row = 1

# 遍历每个数据行(按id分组)
for _, row in df.iterrows():
    # 写入第一行报表数据
    ws.append(['make', row['make'], 'year', row['year'], 'miles', row['miles']])
    # 写入第二行报表数据
    ws.append(['model', row['model'], 'color', row['color'], 'seats', row['seats']])
    # 最后一个分组不添加空行
    if current_row < len(df) * 2:
        ws.append([])
    current_row += 3

# 保存格式化后的Excel文件
wb.save(r'/desktop/reports/output_formatted.xlsx')

代码说明

  • 采用openpyxl替代pandas默认的to_excel方法,实现对Excel行的精细化控制
  • 通过df.iterrows()循环遍历每一条数据,动态生成匹配模板的两行报表内容
  • 每个分组报表后自动添加空行分隔,最后一个分组跳过空行避免冗余
  • 所有数据映射通过DataFrame列名动态获取,无需编写大量硬编码的位置映射代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:31:14