Python Pandas:按Placement ID分组插入合计行并求和写入Excel
嘿,作为Python新手碰到这个需求完全没问题,我来一步步带你实现这个功能~
实现思路
核心思路是按"Placement ID"分组,给每个分组末尾插入一行标注"Total"的合计行并对数值列求和,最后把处理后的结果写入Excel,还可以给合计行加个加粗格式让它更显眼。
具体代码步骤
1. 导入必要的库
我们需要用pandas处理数据,openpyxl来设置Excel的美化格式:
import pandas as pd from openpyxl import load_workbook from openpyxl.styles import Font
2. 读取你的数据
把你的本地数据文件路径替换进去即可:
# 读取Excel数据到DataFrame df = pd.read_excel("你的数据文件路径.xlsx")
3. 给每个Placement ID组添加合计行
用groupby+apply的组合,给每个分组自动插入Total行:
def add_total_row(group): # 计算当前分组所有数值列的求和结果 total_row = pd.DataFrame(group.sum(numeric_only=True)).T # 给合计行的Placement ID列设置为"Total" total_row["Placement ID"] = "Total" # 保持合计行的列顺序和原数据完全一致 total_row = total_row[df.columns] # 把原分组数据和合计行合并 return pd.concat([group, total_row], ignore_index=True) # 对每个Placement ID分组应用上面的函数 result_df = df.groupby("Placement ID", group_keys=False).apply(add_total_row)
4. 写入Excel并美化格式
先把处理好的数据写入Excel,再给Total行设置加粗格式,让结果更贴近目标样式:
# 先写入无格式的处理结果 result_df.to_excel("带合计的结果.xlsx", index=False) # 加载工作簿设置合计行的加粗格式 wb = load_workbook("带合计的结果.xlsx") ws = wb.active # 遍历所有行,找到Placement ID为Total的行并加粗 for row in ws.iter_rows(min_row=2): # 跳过表头行 # 定位Placement ID列的位置,判断当前行是否为合计行 if row[df.columns.get_loc("Placement ID")].value == "Total": for cell in row: cell.font = Font(bold=True) # 保存带格式的最终文件 wb.save("带合计的结果.xlsx")
关键细节说明
numeric_only=True:确保只对数值列求和,避免对字符串列做无效计算- 保持列顺序一致:通过
total_row[df.columns]保证合计行的列顺序和原数据完全匹配 - 格式美化:用
openpyxl给Total行加粗,让结果更清晰易读
这样处理后,你的Excel就会和目标样式完全一致啦~
内容的提问来源于stack exchange,提问作者DKM




