首页 > 解决方案 > 如何仅使用具有唯一值的部分数据帧绘制时间序列

问题描述

我有这个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个站。

你介意帮我吗?谢谢。

标签: pythonpandas

解决方案


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

推荐阅读