我在绘制包含PeriodIndex
的pandas
Dataframe 时遇到问题。
我的数据存在差距,我希望实现以下目标:
- 差距仍应是差距,不加插补;
- 由于每个值在整个时间段内有效,因此该值应在整个时间段内显示为水平线。
- 最好拥有:在周期边界处没有垂直线。
示例
yearly = pd.DataFrame({'avSpeed': [50, 40, 20, 16]}, index=pd.PeriodIndex(['2014', '2015', '2018', '2019'], freq='A'))
avSpeed
2014 50
2015 40
2018 20
2019 16
我的代码到目前为止
- 通过使用
NaN
填充间隙(通过以不变的频率重新采样)使 Dataframe 无间隙:
yearly2 = yearly.resample('A').mean()
avSpeed
2014 50.0
2015 40.0
2016 NaN
2017 NaN
2018 20.0
2019 16.0
- 用
steps-post
绘制:
plt.figure()
yearly2['avSpeed'].plot(color='red', drawstyle='steps-post')
还缺少什么:
- 主要问题:2019年的数值仅在年初显示。
- 另外:存在垂直连接线(不需要)。
3条答案
按热度按时间yvfmudvl1#
可以将
hlines
与pandas.PeriodIndex
属性start_time
和end_time
一起使用8ftvxx2r2#
由于这只是您遇到问题的最后一个期间,因此只需附加一个新期间,偏移量为1年并填充nan即可解决您的问题:
使用
YearEnd
指定pd.offset
将保留您的PeriodIndex
频率,当使用freq='A'
重采样/创建PeriodIndex
时,该频率为A-DEC
。对于其他周期频率,当然应使用其他偏移。whlutmcx3#
不需要对数据进行上采样,甚至不需要使用
NaN
填充数据间隙。您可以将数据绘制为hlines
,如下所示:非常感谢@piRSquared为我指明了正确的方向。
此答案作为CC BY-SA 4.0下OP ElRudi使用PeriodIndex绘制Pandas Dataframe 问题的edit发布。