使用pandas groupby按唯一ID求和后去重及导出Excel新工作表的问询
实现方案
生成去重的ID与总薪酬对应表
你用transform求和后会把汇总值填充到对应ID的每一行,所以天然会有重复记录,两种方式得到无重复结果:
- 方式1:基于已生成的总薪酬列直接去重
# 仅保留ID和汇总薪酬两列,删除重复行 id_pay_summary = df[['ID', 'Total Courier Pay']].drop_duplicates()
- 方式2:直接分组聚合生成汇总表(更高效,不需要先给原表加列)
id_pay_summary = df.groupby('ID', as_index=False)['Total Pay'].sum().rename(columns={'Total Pay': 'Total Courier Pay'})
两种方式得到的结果都和你给出的参考格式完全一致。
同一工作簿多工作表导出
直接用pd.ExcelWriter就可以把两个表写入同一个Excel的不同工作表:
import pandas as pd # 你的原有逻辑,保留全列的原始表 df['Total Courier Pay'] = df.groupby(['ID'])['Total Pay'].transform(sum) # 生成去重汇总表 id_pay_summary = df[['ID', 'Total Courier Pay']].drop_duplicates() # 一次性导出到同个Excel with pd.ExcelWriter('courier_pay_result.xlsx') as writer: # 全列原始数据写入「原始明细」工作表 df.to_excel(writer, sheet_name='原始明细', index=False) # 去重汇总数据写入「ID薪酬汇总」工作表 id_pay_summary.to_excel(writer, sheet_name='ID薪酬汇总', index=False)
如果遇到ID去重不生效的情况,可先统一ID的字段格式再操作,比如先执行df['ID'] = df['ID'].astype(str)。
内容的提问来源于stack exchange,提问作者cchev
相关产品推荐
相关产品推荐

