【发布时间】:2020-10-20 14:08:07
【问题描述】:
我试图在图表中显示不同月份的平均订单价值。 原始数据存储在名为 ikdf 的变量中,并包含以下列:
Invoice Number, Invoice Date, Product Name, Invoice Quantity, Item Amount
11241, 24/07/2020, Batten Strip, 10, £29
11241, 24/07/2020, Perimeter Band, 6, £57
11283, 01/08/2020, Iso Strip, 34, £168.30
如果不是 100% 清楚,“项目数量”列是该产品的总行数。
首先我将一些列更改为数字。
ikdf['Invoice Quantity'] = pd.to_numeric(ikdf['Invoice Quantity'])
ikdf['Item Amount'] = pd.to_numeric(ikdf['Item Amount'])
然后我添加了一个“月”列。
ikdf['Month'] = ikdf['Invoice Date'].str[3:10]
7 月订单的“月份”列仅显示 07/2020
我试图找出每月发票的总收入,然后将该数字除以给定月份的发票数量,这将产生每个月的平均订单价值。 我的尝试如下,但我认为这不是最快的方法。 AOV 仅代表平均订单价值。
Jul2020 = ikdf.loc[ikdf['Month'].str.contains('07/2020')]
rez = Jul2020.groupby('Invoice Number').sum()
rezz = len(rez)
av = Jul2020['Item Amount'].sum()
aov = av / rezz
Jul2020_AOV = aov
Aug2020 = ikdf.loc[ikdf['Month'].str.contains('08/2020')]
rez = Aug2020.groupby('Invoice Number').sum()
rezz = len(rez)
av = Aug2020['Item Amount'].sum()
aov = av / rezz
Aug2020_AOV = aov
Sep2020 = ikdf.loc[ikdf['Month'].str.contains('09/2020')]
rez = Sep2020.groupby('Invoice Number').sum()
rezz = len(rez)
av = Sep2020['Item Amount'].sum()
aov = av / rezz
Sep2020_AOV = aov
months = (Jul2020_AOV, Aug2020_AOV, Sep2020_AOV)
months:
Out: (625.55133640553, 889.1805421686745, 704.4039790575916)
有没有更快的方法可以对各个月份的数据进行分组/拆分? 然后,我将能够显示所有月份的可视化。
任何帮助将不胜感激。 请有人指出我正确的方向吗?
我在此处发布之前尝试过的另一个示例如下所示:
months = [month for month , df in ikdf.groupby('Month')]
plt.bar(months, ikdf['Item Amount'].sum() / len(ikdf.groupby['Invoice Number'].sum())
plt.xticks(months)
plt.ylabel('AOV per month')
plt.xlabel('Months')
plt.show()
这并没有显示月份之间的任何差异,但显示了整个数据集的平均订单价值。 输出的图片在这里: AOV for the months combined
【问题讨论】:
标签: python-3.x pandas dataframe pandas-groupby