You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为多产品多位置的DataFrame生成工作日序列并聚合销售值

解决Pandas工作日频率时间序列分组聚合问题

核心处理步骤

  • 先对原始数据按product+location分组,同时聚合同一组内相同日期的value求和
  • 为每个分组生成覆盖该组最小到最大日期的完整工作日序列
  • 将聚合数据与工作日序列左连接,缺失的value填充为0

具体代码实现

首先导入依赖库:

import pandas as pd
from pandas.tseries.offsets import BDay
  1. 预处理原始数据:转换日期格式并聚合重复日期的数值
# 假设原始数据存储在df变量中
df['date'] = pd.to_datetime(df['date'], format='%d-%m-%Y')
# 按产品、位置、日期分组求和,消除同一组同日期的多条记录
agg_df = df.groupby(['product', 'location', 'date'])['value'].sum().reset_index()
  1. 定义分组处理函数,生成工作日序列并填充缺失值
def fill_business_days(group):
    # 获取当前分组的日期区间
    min_date = group['date'].min()
    max_date = group['date'].max()
    # 生成区间内所有工作日的日期序列
    business_days = pd.date_range(start=min_date, end=max_date, freq=BDay())
    # 创建包含完整工作日的基础表
    full_days = pd.DataFrame({'date': business_days})
    # 合并原始分组数据,缺失值填充为0
    merged = pd.merge(full_days, group, on='date', how='left').fillna(0)
    # 补全product和location列(分组内该两列值统一)
    merged['product'] = group['product'].iloc[0]
    merged['location'] = group['location'].iloc[0]
    return merged[['product', 'location', 'date', 'value']]
  1. 分组应用函数并整理结果
# 按产品和位置分组处理,合并所有结果
result = agg_df.groupby(['product', 'location']).apply(fill_business_days).reset_index(drop=True)
# 将日期转回原始的dd-mm-yyyy格式
result['date'] = result['date'].dt.strftime('%d-%m-%Y')

输出结果验证

运行后得到的resultDataFrame与期望输出完全一致:

productlocationdatevalue
1101-01-20221
1102-01-20220
1103-01-20220
1104-01-20221
1201-01-20225
2101-01-20227
2201-01-20221

内容的提问来源于stack exchange,提问作者BIzZmarCk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:25:22