【问题标题】:Plotting several lines in one plot在一张图中绘制多条线
【发布时间】:2020-05-26 02:39:23
【问题描述】:

我的数据集有三列,即日期、销售和商品。 我想调查市场销售的趋势变化(如高峰或下降)发生在哪里。

Date Sold Item
01/02/2018 1 socks
01/03/2018 4 t-shirts
01/04/2018 3 pants
01/04/2018 2 shirts
01/05/2018 1 socks
...
12/12/2018 21 watches
12/12/2018 35 toys
...
12/22/2018 43 flowers
12/22/2018 25 toys
12/22/2018 32 shirts
12/22/2018 70 pijamas
...
12/31/2018 12 toys
12/31/2018 2  skirts

为此,我一直在考虑两件事:

  • 每个日期的总销售额(例如 2018 年 1 月 2 日的 1 次;2018 年 1 月 3 日的 4 次;2018 年 1 月 4 日的 5 次等);
  • 随时间变化的每件商品的销售数量(即分别查看随时间变化的每件商品的趋势)

第一个关键点应该很容易使用 groupby 评估;第二个关键点也应该可以通过使用 groupby 来实现。 但是,我的困难在于将所有项目绘制在同一个图中(最好是线图)。

我所做的是:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn

df = pd.read_csv("./MarketSales.csv")
sales_plot = df[Item].groupby("Sold").sum().sort_values("Sold",ascending=False).plot()
sales_plot.set_xlabel("Date")
sales_plot.set_ylabel("Frequency")

很遗憾,上面的代码没有产生预期的结果。 Python 中最具挑战性的话题是关于 groupby 和 plot 的使用。

我希望你能帮助我理解这种方法。

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    我不确定你为什么groupby'Sold',因为你似乎对每个日期的售出数量感兴趣,所以这里有两行代码可以解决你的两点:

    df.groupby(['Date'])['Sold'].sum().plot()
    #and
    df.groupby(['Date','Item'])['Sold'].sum().unstack().plot()
    

    此外,您可能希望将之前的日期转换为 df['Date'] = pd.to_datetime(df['Date']),以便更好地可视化时间

    【讨论】:

      猜你喜欢
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 2012-03-21
      • 1970-01-01
      • 2013-01-14
      相关资源
      最近更新 更多