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

如何对Pandas DataFrame按name和index排序并导出至Excel模板指定位置

实现方案

1. 数据排序处理

先构造并排序目标DataFrame:

import pandas as pd

# 构造示例数据
data = {
    'name': ['A', 'B', 'A', 'A', 'B', 'C'],
    'index': [1, 1, 2, 3, 2, 1],
    'val_a': [0.1, 1.1, 1.5, 7.7, 3.9, 5.8],
    'val_b': [0.2, 3.2, 9.9, 7.6, 3.4, 2.4],
    'val_c': [0.3, 2.3, 4.5, 4.9, 2.3, 1.3]
}
df = pd.DataFrame(data)

# 按name和index升序排序
sorted_df = df.sort_values(by=['name', 'index']).reset_index(drop=True)

2. 写入Excel模板

使用openpyxl加载模板(保留原有格式),按name分组写入对应工作表的C列开始位置:

from openpyxl import load_workbook

# 替换为你的模板路径和输出路径
template_path = "模板文件.xlsx"
output_path = "填充完成.xlsx"

# 加载模板工作簿
wb = load_workbook(template_path)

# 遍历每个name分组
for name, group in sorted_df.groupby('name'):
    # 匹配对应工作表(假设工作表名与name值一致,如'A'对应工作表'A')
    if name in wb.sheetnames:
        ws = wb[name]
        # 提取需要写入的列:val_a、val_b、val_c
        write_data = group[['val_a', 'val_b', 'val_c']].values.tolist()
        # 从C列(openpyxl列索引为3)第1行开始写入,若模板有表头可改为start_row=2
        start_row, start_col = 1, 3
        # 逐行填充数据
        for row_idx, row_content in enumerate(write_data, start=start_row):
            for col_idx, value in enumerate(row_content, start=start_col):
                ws.cell(row=row_idx, column=col_idx, value=value)

# 保存结果
wb.save(output_path)

关键注意点

  • 若模板工作表名与name值不匹配,可添加映射字典(如name_sheet_map = {'A': '客户A数据', 'B': '客户B数据'})来关联分组与工作表。
  • 若模板C列需要从指定行开始写入(比如跳过表头行),调整start_row参数即可。
  • 使用openpyxl而非pandas默认写入方式,能完整保留模板的单元格格式、公式等原有内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:45:32