【发布时间】:2019-04-17 14:26:42
【问题描述】:
我有一个数据框 dft,其中包含两列 'DATE' 和 'INVOICE',如下所示,但其中的行数要多得多。
DATE INVOICE
0 2015-01-29 68.61
1 2015-01-15 16.54
2 2015-01-15 4.72
3 2015-01-14 109.71
我首先按INVOICE 的大小对这些数据进行排序,以给出三个单独的数据框。
small = dft[(dft['INVOICE'] < 25) &
(dft['INVOICE'] > 0)]
medium = dft[(dft['INVOICE'] <= 60) &
(dft['INVOICE'] >= 25)]
large = dft[(dft['INVOICE'] > 60)]
然后我总结了每个月每个类别的总发票支出并将其转换为一个列表:
periods = dft.DATE.dt.to_period("M")
small1 = small.groupby(periods).sum().reset_index()
medium1 = medium.groupby(periods).sum().reset_index()
large1 = large.groupby(periods).sum().reset_index()
# Convert Dataframes to lists for plotting
x1 = small1['DATE'].tolist()
x2 = medium1['DATE'].tolist()
x3 = large1['DATE'].tolist()
y1 = small1['INVOICE'].tolist()
y2 = medium1['INVOICE'].tolist()
y3 = large1['INVOICE'].tolist()
最后绘制一个月份和年份的堆积条形图,例如(2015-01) 针对该月的累计发票大小。 我的问题是这个条形图给出了一个错误,因为 y 列表的大小不同。
indexes = np.arange(len(x1))
p3 = plt.bar(indexes, y1 + y2 + y3)
p2 = plt.bar(indexes, y2 + y1)
p1 = plt.bar(indexes, y1)
plt.show()
【问题讨论】:
-
好吧,您当然不需要将 DataFrame 转换为列表进行绘图。你能准确解释一下你在策划什么吗?您可能只需要在绘图之前操作 DataFrame 即可获得所需的内容。
-
感谢您的评论 - 有关绘图的详细信息,请参阅编辑。
标签: python pandas matplotlib pandas-groupby