【问题标题】:creating graph with raw data - Python - Pandas使用原始数据创建图形 - Python - Pandas
【发布时间】: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


    【解决方案1】:

    你应该使用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()
    

    【讨论】:

      猜你喜欢
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 2011-12-27
      • 1970-01-01
      • 2020-06-29
      • 2021-10-14
      • 1970-01-01
      相关资源
      最近更新 更多