python - 如何仅使用具有唯一值的部分数据帧绘制时间序列
问题描述
我有这个df:
指数 | 代码 | 日期 | 车站 | TMAX | TMIN | 聚丙烯 |
---|---|---|---|---|---|---|
0 | 130 | 1991 年 1 月 1 日 | 钠 | 32.6 | 23.4 | 0 |
1 | 130 | 1991 年 2 月 1 日 | 钠 | 31.2 | 22.4 | 0 |
... | ... | ... | ... | ... | ... | ... |
10865 | 130 | 2020 年 12 月 31 日 | 里卡海滩 | 钠 | 钠 | 钠 |
10866 | 182 | 1991 年 1 月 1 日 | 钠 | 31.4 | 29.3 | 0,5 |
10867 | 182 | 1991 年 2 月 1 日 | 钠 | 33.5 | 30.1 | 0.6 |
... | ... | ... | ... | ... | ... | ... |
每个站点都有一个唯一的代码,日期是从 1/01/1991 到 31/12/2020 (dd/mm/yy)。我想为从 1991 年 1 月 1 日到 2020 年 12 月 31 日的每个 STATION 绘制 TMAX、TMIN 和 PP(同一图中的三个变量)的时间序列。有唯一代码的371个站。
你介意帮我吗?谢谢。
解决方案
import numpy as np
import pandas as pd
data = [ { "Index": 0, "CODE": 130, "DATE": "1/01/1991", "STATION": np.NaN, "TMAX": "32.6", "TMIN": "23.4", "PP": "0" }, { "Index": 1, "CODE": 130, "DATE": "2/01/1991", "STATION": np.NaN, "TMAX": "31.2", "TMIN": "22.4", "PP": "0" }, { "Index": 10865, "CODE": 130, "DATE": "31/12/2020", "STATION": "Rica Playa", "TMAX": np.NaN, "TMIN": np.NaN, "PP": np.NaN }, { "Index": 10866, "CODE": 182, "DATE": "1/01/1991", "STATION": np.NaN, "TMAX": "31.4", "TMIN": "29.3", "PP": "0.5" }, { "Index": 10867, "CODE": 182, "DATE": "2/01/1991", "STATION": np.NaN, "TMAX": "33.5", "TMIN": "30.1", "PP": "0.6" } ]
df = pd.DataFrame(data)
# make sure these columns are of dtype float
df['TMAX'] = pd.to_numeric(df['TMAX'])
df['TMIN']= pd.to_numeric(df['TMIN'])
df['PP']= pd.to_numeric(df['PP'])
# load the dates as datetime
df['DATE'] = pd.to_datetime(df['DATE'])
# groupby code
stations = df.groupby(['CODE'])
现在您可以通过站点代码访问每个站点并绘制该站点的图表:
stations.get_group(182).plot('DATE',["TMAX", "TMIN", "PP"])
站 182 的输出:
要遍历组:
import matplotlib.pyplot as plt
for name, station_df in stations:
#create plot
plot = station_df.plot('DATE',["TMAX", "TMIN", "PP"])
# save to file
plt.savefig(str(name) + '.png')