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

如何用Pandas计算5分钟销售增量及25分钟均值(多门店场景)

解决方案

你之前计算出的数值过高,核心原因是没有按门店(LocationNumber)拆分分组,把所有门店的5分钟销售额混在一起累加了。下面是针对多门店场景的完整实现步骤:

步骤1:转换日期格式并按门店+5分钟粒度聚合

先将Date列转为datetime类型,再同时按门店编号和5分钟时间窗分组,对销售额求和得到各门店每个5分钟区间的销售额:

import pandas as pd

# 转换日期列格式
df['Date'] = pd.to_datetime(df['Date'])

# 按门店+5分钟时间窗分组求和
five_min_sales = df.groupby(
    ['LocationNumber', pd.Grouper(key='Date', freq='5min')]
)['Sales'].sum().reset_index(name='Five_minute_sales')

步骤2:计算每25分钟的滚动平均值

25分钟对应5个5分钟周期,因此对每个门店的5分钟销售额做滚动窗口为5的均值计算,前面不足5个周期的结果填充为0:

# 按门店分组计算滚动均值,不足周期的填0
five_min_sales['25_minute Average'] = five_min_sales.groupby('LocationNumber')['Five_minute_sales'].rolling(
    window=5, min_periods=1
).mean().reset_index(drop=True).fillna(0)

# 可选:将Date设为索引,对齐示例格式
five_min_sales = five_min_sales.set_index('Date')

关键注意点

  • 必须先按LocationNumber分组再处理时间窗,否则会把不同门店的销售数据无差别累加,导致数值虚高
  • freq='5min'会自动将时间对齐到最近的5分钟整点(比如18:57:34会归到18:55:00)
  • 滚动参数min_periods=1保证即使不足5个周期也能计算均值,最后用fillna(0)将前4个周期的结果转为0,和你的示例输出逻辑一致

示例输出(基于你的测试数据)

处理后会得到按门店拆分的结果,示例片段如下:

LocationNumber  Five_minute_sales  25_minute Average
Date                                                                     
2022-02-01 15:25:00            6457               15.0                15.0
2022-02-01 15:55:00            3986               15.0                15.0
2022-02-01 18:55:00            8744               18.0                18.0
2022-02-02 11:50:00            5489               11.0                11.0
2022-02-03 14:30:00            1578               14.0                14.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:42:43