簡體   English   中英

用年繪制熊貓數據框

[英]Plotting pandas dataframe with years

       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 軸,如果月份是“Jan_Feb”,則標簽應僅顯示“Feb”。 如果月份是“Jan”,則標簽應顯示“Jan”

我試過 df.plot(),但它在一個圖中繪制了所有內容

您可以先進行一些數據清理 - 將yearsint並將months轉換為fillna正確排序的ordered categorical ,然后按pivot重塑,如有必要,將NaN替換為某個值,例如0fillna

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

請注意,在此數據集中,可以從索引中識別月份,即。 [0..6] [Jan..Jul] [0..6] -> [Jan..Jul] ,應使用以下代碼生成所需的圖:

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

但是,現在 x 軸刻度文本是數字。 我們可以使用以下方法解決該問題:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM