You need to enable JavaScript to run this app. Python处理多工作表Excel按指定列分组统计仅输出最后一列问题排查
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 23:24:03