如何用Pandas将聚合数据按预算名和活动周填充至指定表格?
预算周报表自动化填充解决方案
已完成多Excel文件的数据聚合,但因部分活动周无数据无法直接转置,需将聚合后的Time值按**预算名(行)和活动周(列)**填充至指定格式的目标表格(包含预算名称、总时长Sum [h]及各活动周列),可通过以下代码实现:
完整代码
from pathlib import Path import pandas as pd import numpy as np path = r'C:\FUNDS' # 支持Unix/Linux/Mac路径格式,如'/home/user/FUNDS' # 批量读取指定路径下的所有xlsx文件 files = Path(path).glob('*.xlsx') # 使用.rglob('*.xlsx')可遍历子目录文件 dfs = [] for f in files: data = pd.read_excel(f) # 将文件名(不含后缀)作为预算名称字段 data['Budget name'] = f.stem dfs.append(data) # 合并所有文件数据 df = pd.concat(dfs, ignore_index=True) # 按预算名称、活动周分组,计算Time字段总和 grouped_data = df.groupby(['Budget name', 'Activity week'])['Time'].sum() # 重塑为宽表:预算为行,活动周为列,缺失数据的周填充0 pivot_df = grouped_data.unstack(fill_value=0) # 计算每个预算的总时长,新增Sum [h]列 pivot_df['Sum [h]'] = pivot_df.sum(axis=1) # 调整列顺序,将Sum [h]移至最前方,活动周按数字排序 sorted_weeks = sorted(pivot_df.columns.drop('Sum [h]')) final_df = pivot_df[['Sum [h]'] + sorted_weeks].reset_index() # 导出到目标Excel文件 final_df.to_excel("TEAM_spending.xlsx", sheet_name='Spending', index=False)
关键步骤说明
- 字段对齐:将原
file列改为Budget name,与目标表格字段直接对应 - 缺失周补全:使用
unstack(fill_value=0)自动补全所有出现过的活动周,无数据的周填充0,解决缺失周无法转置的问题 - 总时长计算:通过
sum(axis=1)对每行活动周数据求和,生成Sum [h]列 - 列序匹配:将
Sum [h]移至列首,活动周按数字排序,完全贴合目标表格格式 - 索引转列:将预算名称从索引转为普通列,导出后表格结构与目标一致
内容的提问来源于stack exchange,提问作者Przemysław Mycek
相关产品推荐
相关产品推荐

