Python处理多工作表Excel按指定列分组统计仅输出最后一列问题排查
问题原因
你现有代码仅保留最后一列统计结果是由以下几个错误导致的:
- 内层遍历
logs的循环里,每次都重新赋值df1,之前列的统计结果被直接覆盖,没有合并 df1.to_excel的缩进错误,写在了遍历工作表的循环外面,只会把最后一个工作表的最后一列结果写入文件- 代码中
df1.to_update.get(sheet)是无效语句,没有任何实际作用 - 统计规则混乱:开头你对
Msd做count统计,后面其他列做sum统计,已在修正代码中保留该逻辑,可按需调整
修正后代码
import pandas as pd sheets_names = ['R9_14062021','R9_02122020','R9_14062021','R9_28052021','R9_17052021','R9_03052021','R9_14042021','R9_24032020','R9_19032020','R9 30112020','R9_17112020','R7_27012021','LOGS R9 01032021','LOGS R7 SAT01032021','R7_30032020','G9_06032020','G5T_20012021','TNT_08122020','R7_SAT_24112020','G6T_12112020','R9 12102020'] logs = [' Msd','Provider Id','Terminal Type','chgtCh','accessRecordModule','playerPlay startOver','playerPlay PdL','playerPlay PVR','contentHasAds','pdlComplete','lirePdl','lireVod'] dfs_list = pd.read_excel('COMPIL LOGS INDICATEURS V14062021.xlsx', sheet_name=sheets_names) writer = pd.ExcelWriter('pandas_multiple.xlsx', engine='xlsxwriter') for sheet in dfs_list: df = dfs_list[sheet] df['Dt'] = pd.to_datetime(df['Dt']).dt.date # 筛选当前工作表存在的目标列 exist_logs = [log for log in logs if log in df.columns] if not exist_logs: continue # 无需要统计的列则跳过当前工作表 # 定义聚合规则 agg_rules = {} for log in exist_logs: if log == ' Msd': agg_rules[log] = 'count' else: agg_rules[log] = 'sum' # 一次性完成所有列的分组统计 df_stat = df.groupby(['Dt','webApp','mw'], as_index=False).agg(agg_rules) # 写入对应工作表 df_stat.to_excel(writer, sheet_name=sheet, index=False) writer.save()
调整说明
- 提前筛选每个工作表中存在的目标列,避免无效判断
- 一次性对所有存在的列做分组聚合,把多列统计结果合并到同一个DataFrame中
- 把写入Excel的逻辑缩进至遍历工作表的循环内,每个工作表的统计结果都会单独写入对应的sheet
- 如果需要统一所有列的统计方式,直接修改
agg_rules的生成逻辑即可
内容的提问来源于stack exchange,提问作者user14635413
相关产品推荐
相关产品推荐

