我的数据如下。我想在python中绘制一个简单的折线图,其中X轴上的项目和Y轴上的总销售额。总销售额是项目级别的合计销售额。
有人可以为此提供帮助吗?
Item Date Sales
Item1 4/25/2018 55
Item2 4/25/2018 21
Item3 4/25/2018 50
Item4 4/25/2018 58
Item5 4/25/2018 81
Item6 4/25/2018 79
Item7 4/25/2018 61
Item8 4/25/2018 37
Item9 4/25/2018 51
Item10 4/25/2018 53
Item1 4/26/2018 27
Item2 4/26/2018 28
Item3 4/26/2018 26
Item4 4/26/2018 95
Item5 4/26/2018 15
Item6 4/26/2018 89
Item7 4/26/2018 42
Item8 4/26/2018 21
Item9 4/26/2018 39
Item10 4/26/2018 67
Item1 4/27/2018 14
Item2 4/27/2018 45
Item3 4/27/2018 35
Item4 4/27/2018 68
Item5 4/27/2018 76
Item6 4/27/2018 63
Item7 4/27/2018 73
Item8 4/27/2018 61
Item9 4/27/2018 59
Item10 4/27/2018 93
Item1 4/28/2018 27
Item2 4/28/2018 63
Item3 4/28/2018 55
Item4 4/28/2018 73
Item5 4/28/2018 58
Item6 4/28/2018 90
Item7 4/28/2018 67
Item8 4/28/2018 72
Item9 4/28/2018 64
Item10 4/28/2018 98
此致 菲利普
答案 0 :(得分:1)
使用pandas,可以通过将数据加载到数据框中,执行groupby并添加每组销售额来实现。最后,熊猫已经包装了一些通常的matplotlib图,可以直接从熊猫中调用。
# df['Date'] = pd.to_datetime(df['Date']) # For the desired plot it is not necessary but
# it is a good idea, and allow plots by date too
df.groupby(by='Item').sum().plot.bar(y='Sales',color='g')
生成以下图:
为了根据数字对项目从1到10进行排序,可以在绘图前使用this answer。
答案 1 :(得分:0)
使用pandas,
import pandas as pd
df = pd.read_csv('yourfile.csv')
df_grp = df.groupby('Item')['Sales'].sum()
df_grp = df_grp[df_grp.index.str.split('Item').str[1].astype(int).argsort()]
df_grp.plot()
plt.xticks(np.arange(df_grp.shape[0]), df_grp.index, rotation=90)
输出:
答案 2 :(得分:0)
还有选择在没有熊猫的情况下进行,只有numpy。从包含“商品”列中的信息和items
待售商品的数组sales
开始,代码如下所示:
u, f = np.unique(items, return_inverse=True) # returns unique array of occurences and the indices to retrieve the original items array.
# i.e. u, f = np.unique([1,2,3,1,1,2,1], return_inverse=True) returns
# u: [1,2,3]
# f: [0 1 2 0 0 1 0] such that u[f]==[1,2,3,1,1,2,1]
imgs = np.bincount(f, sales)
inds = np.argsort(np.char.lstrip(u,'Item').astype(int))
plt.plot(np.arange(len(u)),imgs[inds])
plt.xticks(np.arange(len(u)),u[inds])
注意:假设输入数组具有propper dtype,如果不是这种情况,则应使用.astype()