我有一个包含四列的 csv 文件:日期、批发商、产品和销售额。我正在寻找每个日期每个产品和批发商组合的先前销售额的平均值。它表示批发商“B”在时间“C”的产品“A”的平均先前销售额是多少。
例如,我们知道批发商“B”的产品“A”在 1 月、4 月、5 月、8 月的销售额分别为 100、200、300、400。假设我们在 1 月之前没有任何记录。那么批发商 'B' 的产品 'A' 在 4 月的平均销售量等于 100/1,在 5 月等于 (200+100)/2 并且8 月是 (300+200+100)/3。
下表显示了我的数据:
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')
df2 = df.groupby(['wholesaler','product'])['sales'].mean()
这给出了每个批发商产品的平均销售额,而我正在寻找每个日期的先前销售额的平均值。
wholesaler product avg sales
11209 UME24 4.00
13131 UPE55 713.00
22423 UME24 1.00
24302 U4E16 121.00
感谢您的帮助!
最佳答案
这对我来说非常棘手,但无论如何都有效。期待其他人提供更优雅的解决方案。
import pandas as pd
import datetime
dateparse = lambda x: pd.datetime.strptime(x, '%m/%d/%Y')
df = pd.read_csv('Sample.csv',index_col='date', parse_dates=[0], date_parser=dateparse)
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
cnct.to_csv('TotalAvg.csv')
结果,
wholesaler product date
11209 UME24 2013-12-31 NaN
13131 UPE55 2012-12-31 NaN
2013-02-23 1.0
2013-04-24 578.5
52237 UPE54 2013-12-18 NaN
2013-12-31 9.0
53929 UME24 2013-12-19 NaN
UPE54 2012-12-31 NaN
82204 UPE55 2012-12-31 NaN
83389 UPE54 2013-12-01 NaN
2013-12-17 9.0
关于python - python如何求以前每次销量的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36950503/