在1年内绘制DataFrame

时间:2018-02-16 12:28:00

标签: python pandas dataframe matplotlib

我有数据框:

                    temp_old                                            temp_new
Year                2013        2014    2015    2016    2017    2018    2013    2014    2015    2016    2017    2018
Date                                                

2013-01-01 23:00:00 21.587569   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
2013-01-02 00:00:00 21.585347   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
2013-01-02 01:00:00 21.583472   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
... ... ... ... ... ... ... ... ... ... ... ... ...
2018-02-05 00:00:00 NaN         NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     22.882083
2018-02-05 01:00:00 NaN         NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     22.878472

当我绘制这个df时,我的结果。

enter image description here

我的目标是展示它,但没有多年分开。所以我希望1月份:12月份在一张图表上有5条曲线。

更新:(绘制代码)

df_sep_by_year.plot(figsize=(15,8))

1 个答案:

答案 0 :(得分:2)

只需从“日期”列中删除年份即可。我的意思是代替 2013-01-01 23:00:00 使用 01-01 23:00:00 ,并为其他记录调整您的数据。

# remove datetime index
df.reset_index(inplace=True)
# create new column without year, use ':02d' to correct sorting
df['new_date'] = df.Date.apply(lambda x: '{:02d}-{:02d}-{:02d}:00:00'.format(x.month, x.day, x.hour)) 
# set new index to df
df.set_index('new_date', inplace=True)
# remove old column with datetime
df = df.drop(labels=['Date'], axis=1)
# remove multiindex in columns
df.columns = [''.join(str(col)) for col in df.columns]
# join variable from different year but the same month and day
df = pd.concat([pd.DataFrame(df[x]).dropna(axis=0, how='any') for x in df_sep_by_year], axis=1).dropna(axis=1, how='all')
df.plot()