Pandas / MLP ::在3年的时间里绘制36个月而不是12个月

时间:2019-02-09 11:37:25

标签: pandas matplotlib

下面的代码片段显示3年间3家公司的收入增长/下降,但是以这种格式,我不知道如何添加以下内容:

1)怎么只看到3年中只有12个月(df.PublishedAtUtc.dt.month)或看到基于year(df.PublishedAtUtc.dt.year)的非常粗糙的图形,而不是看到36数量月周期(我尝试过其他参数,没有运气)

https://i.imgur.com/beiO8w2.png

sums = df.groupby(['Company Name', df.Datetime.dt.month])['PaidTotal'].sum().reset_index(level=0)
for company in sums['Company Name'].unique():
sums[sums['Company Name'] == company]['PaidTotal'].plot();

仅数据示例-原始数据包含数千行:

Company Name    PaidTotal   Datetime
585 CompanyA    218916.0    2016-10-14 10:51:07
586 CompanyB    430000.0    2016-01-23 11:05:08
591 CompanyB    546217.0    2016-09-26 14:20:00
592 CompanyC    73780.0     2016-12-07 07:52:01
593 CompanyA    132720.0    2017-10-04 16:14:10
595 CompanyC    52065.0     2017-11-12 14:32:40
585 CompanyA    234566.0    2017-10-14 10:51:07
586 CompanyB    252325.0    2017-01-23 11:05:08
591 CompanyB    546217.0    2018-09-26 14:20:00
592 CompanyC    745780.0    2018-12-07 07:52:01
593 CompanyA    1322320.0   2018-10-04 16:14:10
595 CompanyC    5432065.0   2018-11-12 14:32:40

1 个答案:

答案 0 :(得分:0)

似乎您正在使用Datetime对象存储日期,因此您可以使用Matplotlib的here文档中的plt.plot_date()函数来解决问题。

此函数假定您将日期/时间存储为Datetime对象。因此,您必须通过传递xdate=True来指定它(请参见下面的代码)。

要绘制日期范围为datetimes的日期范围对象totals的任何范围,请使用类似以下的方法:

plt.plot_date(dates,totals,xdate=True)
plt.xlabel('date')
plt.ylabel('totals')

这应该可以为您提供所需的信息,例如,使用示例数据: