gpt4 book ai didi

python - 如何使用 groupby 计算平均每周支出,周为周一至周日?

转载 作者:行者123 更新时间:2023-12-02 04:32:42 31 4
gpt4 key购买 nike

我有一个包含购买金额和日期的客户数据框。在本例中,我有两个客户,AB:

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()
print(df3.head())

user date purchase
0 A 2015-04-24 51
1 A 2015-04-25 52
2 A 2015-04-26 53
3 A 2015-04-27 54
4 A 2015-04-28 55

我只想知道用户每周的平均支出,一周是从周一到周日。预期结果:

  user       average_weekly_spend 
0 A 51
1 B 60

但是我不知道如何将其设置为周一至周日。目前我正在使用 resample7D。我认为,这意味着所有客户对一周都有不同的定义。我相信从第一次购买开始需要7天等等。因此,每个客户都会有不同的开始日期。

df3.groupby('user').apply(lambda x: x.resample('7D', on='date').mean()).groupby('user')['purchase'].mean()


user
A 78.125
B 27.125

是否可以为所有客户将我自己的一周定义为周一至周日?

最佳答案

看来您需要W-Mon频率:

df = (df3.groupby('user')
.resample('W-Mon', on='date')['purchase']
.mean()
.mean(level=0)
.reset_index())
print (df)
user purchase
0 A 75.5
1 B 28.7

不确定这里是否是好的解决方案,使用 meanmean ,也许您可​​以通过重新采样获得计数和总和,然后根据定义创建均值 - 总和除以计数:

df = (df3.groupby('user')
.resample('W-Mon', on='date')['purchase']
.agg(['size','sum'])
.sum(level=0))
df['mean'] = df.pop('sum') / df.pop('size')
print (df)
mean
user
A 75.5
B 24.5

关于python - 如何使用 groupby 计算平均每周支出,周为周一至周日?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59411908/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com