我有一个csv文件,包含四列数据:日期、批发商、产品和销售额。我想要找到每个日期下产品和批发商组合的过去52周平均销售额。这意味着在过去的52周中,产品'A'在批发商'B'处于时间'C'时的平均历史销售额是多少。
例如,我们知道产品'A'在批发商'B'处于1月、4月、5月、8月的销售额分别为100、200、300、400。假设我们在1月之前没有任何记录。因此,在4月份时,产品'A'在批发商'B'处的历史平均销售额等于100/1,在5月份时等于(200+100)/2,在8月份时等于(300+200+100)/3。
以下是我的数据表格:
随着时间的推移,销售记录的迭代不断增加。我需要找出过去52周内销售额的平均值。也就是说,在某个日期(例如2015年11月6日),特定批发商的某个产品在过去52周内的平均销售额是多少。非常感谢您的帮助!
以下是我的数据表格:
date wholesaler product sales
12/31/2012 53929 UPE54 4
12/31/2012 13131 UPE55 1
2/23/2013 13131 UPE55 1156
4/24/2013 13131 UPE55 1
12/1/2013 83389 UPE54 9
12/17/2013 83389 UPE54 1
12/18/2013 52237 UPE54 9
12/19/2013 53929 UME24 1
12/31/2013 82204 UPE55 9
12/31/2013 11209 UME24 4
12/31/2013 52237 UPE54 1
现在我正在使用:
df = pd.read_csv('Sample.csv',index_col='date')
expd_gb = df.reset_index().groupby(['wholesaler', 'product'])['sales'].apply(pd.Series.expanding)
idx = df.reset_index().groupby(['wholesaler', 'product', 'date'])['sales'].count().index
cnct = pd.concat([expd_gb.iloc[n].mean().shift(1) for n in range(len(expd_gb))])
cnct.index = idx
这给出了每个产品-批发商组合的先前销售总平均值(不是过去52周的平均值)。结果如下:
wholesaler product date
11209 UME24 12/31/2013 NaN
13131 UPE55 12/31/2012 NaN
2/23/2013 1.0
4/24/2013 578.5
52237 UPE54 12/18/2013 NaN
12/31/2013 9.0
53929 UME24 12/19/2013 NaN
UPE54 12/31/2012 NaN
82204 UPE55 12/31/2013 NaN
83389 UPE54 12/1/2013 NaN
12/17/2013 9.0
随着时间的推移,销售记录的迭代不断增加。我需要找出过去52周内销售额的平均值。也就是说,在某个日期(例如2015年11月6日),特定批发商的某个产品在过去52周内的平均销售额是多少。非常感谢您的帮助!
timedelta()
函数能否更快地工作?实际上,我需要计算超过2500万行数据,并希望找到最快的方法来得出结果。再次感谢您优雅的代码! - Ashkan Mirzaee