首页 文章

用多年绘制pandas数据帧

提问于
浏览
1
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

有没有办法绘制上面的熊猫数据框,以便绘图有3行(3个独特年份中的每一行一个) . Y轴有“错误”列,X轴显示月份 . 传奇应该是3年:2011年,2012年,2013年

对于X轴,如果month是'Jan_Feb',那么label应该只是'Feb' . 如果月份是'Jan',那么标签应该说'Jan'

我尝试了df.plot(),但它在一个图中绘制了所有内容

2 回答

  • 0

    您可以先执行一些数据清理 - 将 years 转换为 intmonthsordered categorical以按月进行正确排序,然后按_1756880重新整形,如有必要,请将 NaN 替换为某个值,例如: 0 by fillna

    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()
    

    graph

    正确订购的另一种可能解决方案是reindexlist 中的订购月份:

    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..6] - > [Jan..Jul] ,应使用以下代码生成所需的绘图:

    plt = df.pivot(values='error', columns='Year').plot()
    

    但是,现在x轴刻度文本是数字 . 我们可以使用以下方法解决

    plt.set_xticklabels(['Jan','Feb','Mar','Apr','May','Jun','Jul'])
    

相关问题