【问题标题】:How to plot time series only with portions of dataframes that have unique values如何仅使用具有唯一值的数据帧部分绘制时间序列
【发布时间】:2021-05-23 11:24:36
【问题描述】:

我有这个 df:

Index CODE DATE STATION TMAX TMIN PP
0 130 1/01/1991 NaN 32.6 23.4 0
1 130 2/01/1991 NaN 31.2 22.4 0
... ... ... ... ... ... ...
10865 130 31/12/2020 Rica Playa NaN NaN NaN
10866 182 1/01/1991 NaN 31.4 29.3 0,5
10867 182 2/01/1991 NaN 33.5 30.1 0.6
... ... ... ... ... ... ...

每个站点都有一个唯一的代码,日期是从 1991 年 1 月 1 日到 2020 年 12 月 31 日(日/月/年)。我想为从 1991 年 1 月 1 日到 2020 年 12 月 31 日的每个 STATION 绘制 TMAX、TMIN 和 PP(同一图中的三个变量)的时间序列。有 371 个站有唯一代码。

你介意帮帮我吗?谢谢。

【问题讨论】:

  • 如果您将数据框提供为可以复制和粘贴的代码或文件内容而不是图像,则会更容易为您提供帮助。
  • 我有 371 个站点,每个站点都有从 1991 年 1 月 1 日到 2020 年 12 月 31 日的数据,因此将 df 作为代码或文件提供有点困难。 df 的 len 为 4057702。抱歉。
  • 是的,但是您可以提供大约 10 行代码来提供具有代表性的代码示例。
  • 好的,我会做的

标签: python pandas


【解决方案1】:
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')

【讨论】:

  • 谢谢,但是当我想在站中使用 for i 循环它时:stations.get_group(i).plot('DATE',["TMAX", "TMIN", "PP"]) 我得到一个错误:'DataFrame' 对象是可变的,因此它们不能被散列。我如何循环它以获得所有图形的系列?
  • 我已经用一个例子更新了答案来解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2020-05-16
  • 2016-02-22
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多