如何根据日期列将DataFrame按周聚合并计算周总值
宽表按周聚合日期列的实现方案
核心逻辑是将列维度的日期作为分组依据,同属一个固定7天周期的列按行维度计算求和值,全程不需要对宽表做长表转换,对长跨度日期列的处理效率远高于手动循环拼接。
预处理数据结构
先将品类标签列Name转为行索引,同时把所有字符串格式的日期列名统一解析为pandas可识别的datetime类型,避免分组时的匹配错误:import pandas as pd # Name列转为行索引 df = df.set_index("Name") # 列名批量转换为datetime格式 df.columns = pd.to_datetime(df.columns)按列轴做周维度聚合
借助resample方法直接在列轴上按7天周期分组,对同组的列按行求和,同时配置参数让分组后的列名取每周周期的起始日期,和示例的列名格式完全匹配:weekly_agg_df = df.resample( rule="7D", # 以连续7天为一个聚合周期 axis=1, # 将聚合逻辑应用到列轴,而非默认的行轴 closed="left", # 每个周期采用左闭右开区间,避免相邻周期重复计数 label="left" # 用每个周期的起始日期作为分组后的列名 ).sum()格式还原匹配原始表结构
将之前设为索引的Name列还原为普通数据列,再把datetime格式的列名转回YYYY-MM-DD的字符串格式,即可得到最终的周统计结果:weekly_agg_df = weekly_agg_df.reset_index() # 列名格式统一为字符串日期 weekly_agg_df.columns = weekly_agg_df.columns.strftime("%Y-%m-%d")
适配调整说明
- 若业务需要对齐自然周(比如固定从每周一开始计数,而非从数据最早日期开始每7天切分周期),可将
rule="7D"替换为rule="W-MON",即可自动匹配每周一作为周起始点分组 - 和你之前尝试的
aggregate方法相比,该方案的适配性更强:aggregate默认基于行标签完成分组,而本场景的分组维度是列自身的日期属性,通过resample指定轴方向可直接匹配需求,无需额外做宽表转长表的冗余操作。
内容的提问来源于stack exchange,提问作者alphaepsilon
相关产品推荐
相关产品推荐

