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

如何用groupby按周一至周日的周计算用户平均周消费?

如何为所有客户统一定义周一至周日的周来计算平均消费?

我来帮你搞定这个问题!你遇到的核心问题是resample('7D')是基于每个用户的首笔消费日期生成连续7天周期,而不是使用统一的周一至周日自然周,所以结果不符合预期。下面是具体的解决方法:

核心思路

我们需要用pd.Grouper来指定统一的周分组规则,强制所有用户使用周一作为周起始、周日作为周结束的自然周,而不是各自的消费起始日。

完整可运行代码

import pandas as pd

# 先还原你的原始数据
df1 = pd.DataFrame(index=pd.date_range('2015-04-24', periods = 50)).assign(purchase=[x for x in range(51,101)])
df2 = pd.DataFrame(index=pd.date_range('2015-04-28', periods = 50)).assign(purchase=[x for x in range(0,50)])
df3 = pd.concat([df1,df2], keys=['A','B'])
df3 = df3.rename_axis(['user','date']).reset_index()

# 关键计算步骤
# 1. 按用户+周一起始的周分组,计算每周消费均值
weekly_grouped = df3.groupby(
    ['user', pd.Grouper(key='date', freq='W-MON')]  # W-MON代表周以周一为起点
)['purchase'].mean()

# 2. 对每个用户的所有周均值再取平均,得到最终结果
average_weekly = weekly_grouped.groupby('user').mean().reset_index(name='average_weekly_spend')

print(average_weekly)

代码细节解释

  • pd.Grouper(key='date', freq='W-MON'):这是解决问题的关键!W-MON是pandas的频率标识,明确指定周的起始是周一,结束是周日。这样不管每个用户的首笔消费日期是什么,都会被划分到统一的自然周里。
  • 第一步分组计算的是每个用户每周的平均消费,第二步再对这些周均值取整体平均,就得到了你想要的“平均每周消费”。

结果验证

运行这段代码后,你会得到符合预期的统一周计算结果,再也不会出现不同用户周起始不一致的问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:07:56