python - python如何求以前每次销量的平均值

标签 python pandas

我有一个包含四列的 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/

相关文章:

python - 使用 scikit-learn 进行文档分类 : most efficient way to get the words (token) that impacted more on the classification

python - 如何从 cython 安装文件中删除 -pthread 编译器标志

python - Pandas、scipy 和 numpy 的 MAD 结果不同

pandas - GridSearchCV : "TypeError: ' StratifiedKFold' object is not iterable"

Pandas 向前填充最大直到位置

python - QPushButton,禁用所有其他按钮,除非再次按下

python - pickle : Why are they called that?

python - 找不到匹配的 GLX 视觉

python - 如何将 pandas 数据帧传递到请求参数中

excel - 使用 pandas dataframe 读取电子表格的最后一张