从Pandas Dataframe创建(多)线图?

时间:2017-03-14 20:26:32

标签: pandas numpy matplotlib data-visualization

我需要基本上使用'日期,' max'和' min'来创建线条图。我创建的数据框中的列。基本上,我需要制作一段历史高/低温度的线图,两条线之间有阴影。我有Dataframe:

import matplotlib.pyplot as plt
import mplleaflet
import pandas as pd
import numpy as np

df = pd.read_csv('data/C2A2_data/BinnedCsvs_d400/fb441e62df2d58994928907a91895ec62c2c42e6cd075c2700843b89.csv')
df['max'] = df.groupby('Date')['Data_Value'].transform(lambda x: x.max())
df['min'] = df.groupby('Date')['Data_Value'].transform(lambda x: x.min())
df = df.sort_values('max', ascending=False).drop_duplicates('Date').sort_index()
df = df.sort('Date')

DataFrame我得到了:

                 ID        Date Element  Data_Value  max  min
1906    USC00205822  2005-01-01    TMIN         -17  156  -56
129307  USC00202308  2005-01-02    TMIN         -17  139  -56
150989  USW00004848  2005-01-03    TMAX          72  133    0
61059   USC00203712  2005-01-04    TMIN          -6   39  -39
51221   USC00205563  2005-01-05    TMIN         -94   33  -94
122448  USC00205563  2005-01-06    TMIN         -72    0 -106
163039  USW00094889  2005-01-07    TMAX         -33    6 -111
99499   USC00208202  2005-01-08    TMIN         -83   17 -100
134653  USW00094889  2005-01-09    TMIN         -28   28  -67
25301   USW00094889  2005-01-10    TMAX          17   44  -56
48510   USC00208080  2005-01-11    TMAX          17   44  -22
4702    USC00205822  2005-01-12    TMAX          17  139  -17
321     USC00208202  2005-01-13    TMAX         139  161  -83
132913  USC00205822  2005-01-14    TMAX         117  150 -128
97273   USC00207312  2005-01-15    TMIN        -117  -33 -144
131251  USC00207320  2005-01-16    TMIN        -111  -33 -150
109190  USC00207320  2005-01-17    TMAX         -78  -50 -189
25774   USW00014833  2005-01-18    TMAX         -89  -33 -217
91432   USC00200230  2005-01-19    TMAX           0   11 -300
71246   USW00004848  2005-01-20    TMIN         -89   11 -156
157005  USC00205822  2005-01-21    TMIN        -144  -39 -178
8233    USW00004848  2005-01-22    TMAX         -78  -72 -178
29357   USC00200032  2005-01-23    TMIN        -183  -44 -250
32777   USC00208202  2005-01-24    TMAX         -67   11 -267
57337   USW00014833  2005-01-25    TMIN         -50   28 -228
2111    USC00205563  2005-01-26    TMAX           0   28 -206
145972  USC00202308  2005-01-27    TMAX           0    6 -239
84449   USC00208202  2005-01-28    TMAX         -67  -11 -250
72620   USW00014853  2005-01-29    TMIN        -144   17 -222
96968   USC00208080  2005-01-30    TMIN        -139   28 -217

所以基本上,我只需要制作两行 - 一个最大,一个小时,其中x ='日期'对于两者,和y =' max'对于最大值和y =' min'为了分钟。

Haven确实找到了与此相关的任何其他帖子,所以感谢您的帮助。额外奖励:我还需要在2015年之后删除所有值,所以我也很感激帮助(再次,这样做有困难)。

2 个答案:

答案 0 :(得分:1)

您可以使用pandas plot

ax = df.plot('Date', 'max')
df.plot('Date', 'min', ax = ax)

答案 1 :(得分:0)

如果我理解正确的话,目的是绘制元素为TMIN的条目中min min的值,类似于max。

在这种情况下,以下内容应该有效:

import pandas as pd
import matplotlib.pyplot as plt
# reading in the dataframe from the question text
df = pd.read_csv("data/Tminmax.csv", delim_whitespace=True)
# make Date a true Datetime
df["Date"] = pd.to_datetime(df["Date"])
# create two new Dataframes, one where Element is TMIN, one TMAX
dfmin = df[df["Element"] == "TMIN"]
dfmax = df[df["Element"] == "TMAX"]
# plot both dataframes 
ax = dfmin.plot("Date", "min")
dfmax.plot("Date", "max", ax=ax)
ax.figure.autofmt_xdate()
plt.show()

产生下面的图

enter image description here