error Months Year
0 15.198688 Jan 2011.0
1 13.793969 Jan_Feb 2011.0
2 15.171848 Jan_Mar 2011.0
3 5.779007 Jan_Apr 2011.0
4 1.615044 Jan_May 2011.0
5 1.536096 Jan_Jun 2011.0
6 1.159742 Jan_Jul 2011.0
0 1.697396 Jan 2012.0
1 5.149847 Jan_Feb 2012.0
2 0.876639 Jan_Mar 2012.0
3 1.865001 Jan_Apr 2012.0
4 0.333077 Jan_May 2012.0
5 2.056728 Jan_Jun 2012.0
0 9.676028 Jan 2013.0
1 3.919200 Jan_Feb 2013.0
2 4.171534 Jan_Mar 2013.0
3 2.318090 Jan_Apr 2013.0
4 0.786901 Jan_May 2013.0
5 0.936041 Jan_Jun 2013.0
6 0.115029 Jan_Jul 2013.0
有没有办法在上面绘制pandas数据框,以便绘图有3行(3个独特年份各有一行)。 Y轴有“错误”列,X轴显示月份。传奇应该是3年:2011年,2012年,2013年
对于X轴,如果month是'Jan_Feb',那么label应该只是'Feb'。如果月份是'Jan',那么标签应该说'Jan'
我尝试了df.plot(),但它在一个情节中绘制了所有内容
答案 0 :(得分:1)
您可以先进行一些数据清理 - 将years
投放到int
和months
投放到ordered categorical
,以便按月进行正确排序,然后按pivot
重新塑造,如果需要,可以用某个值替换NaN
,例如fillna
的0
:
df.Year = df.Year.astype(int)
df.Months = df.Months.str[-3:].astype('category',
ordered=True,
categories=['Jan','Feb','Mar','Apr','May','Jun','Jul'])
df = df.pivot(index='Months', columns='Year', values='error').fillna(0)
print (df)
Year 2011 2012 2013
Months
Jan 15.198688 1.697396 9.676028
Feb 13.793969 5.149847 3.919200
Mar 15.171848 0.876639 4.171534
Apr 5.779007 1.865001 2.318090
May 1.615044 0.333077 0.786901
Jun 1.536096 2.056728 0.936041
Jul 1.159742 0.000000 0.115029
df.plot()
正确排序的另一种可能解决方案是list
中按订购月份的reindex
:
df.Year = df.Year.astype(int)
df.Months = df.Months.str[-3:]
df = df.pivot(index='Months', columns='Year', values='error')
.fillna(0)
.reindex(['Jan','Feb','Mar','Apr','May','Jun','Jul'])
print (df)
Year 2011 2012 2013
Months
Jan 15.198688 1.697396 9.676028
Feb 13.793969 5.149847 3.919200
Mar 15.171848 0.876639 4.171534
Apr 5.779007 1.865001 2.318090
May 1.615044 0.333077 0.786901
Jun 1.536096 2.056728 0.936041
Jul 1.159742 0.000000 0.115029
答案 1 :(得分:0)
注意到在此数据集中,可以从索引中识别月份,即。 [0..6]
- > [Jan..Jul]
,应使用以下代码生成所需的绘图:
plt = df.pivot(values='error', columns='Year').plot()
但是,现在x轴刻度文本是数字。我们可以使用以下方法解决这个问题:
plt.set_xticklabels(['Jan','Feb','Mar','Apr','May','Jun','Jul'])