Python 3.x 使用原始数据创建图形-Python-Pandas

Python 3.x 使用原始数据创建图形-Python-Pandas,python-3.x,pandas,dataframe,pandas-groupby,Python 3.x,Pandas,Dataframe,Pandas Groupby,我试图在一个图表中显示各个月的平均订单值。 原始数据存储在名为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 如果不

我试图在一个图表中显示各个月的平均订单值。 原始数据存储在名为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()
这没有显示月与月之间的任何差异,但显示了整个数据集的平均订单值。 输出的图片如下所示:

您应该使用
datetime
类型:

df['month'] = pd.to_datetime(df['Invoice Date']).dt.month

plot_data = df.groupby(['Invoice Number', 'month'])['Item Amount'].sum().unstack('month')

plot_data.plot()