Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 时间序列重采样_Python_Pandas_Dataframe_Max_Resampling - Fatal编程技术网

Python 时间序列重采样

Python 时间序列重采样,python,pandas,dataframe,max,resampling,Python,Pandas,Dataframe,Max,Resampling,我有一个stn格式的40年时间序列;yyyymmddhh;降雨量,其中yyyy=年,mm=月,dd=日,hh=小时。该系列的分辨率为每小时一次。我通过以下分组方法提取了每年的最大值: import pandas as pd df = pd.read_csv('data.txt', delimiter = ";") df['yyyy'] = df['yyyymmhhdd'].astype(str).str[:4] df.groupby(['yyyy'])['rainfall']

我有一个stn格式的40年时间序列;yyyymmddhh;降雨量,其中yyyy=年,mm=月,dd=日,hh=小时。该系列的分辨率为每小时一次。我通过以下分组方法提取了每年的最大值:

import pandas as pd
df = pd.read_csv('data.txt', delimiter = ";")
df['yyyy'] = df['yyyymmhhdd'].astype(str).str[:4]
df.groupby(['yyyy'])['rainfall'].max().reset_index()
现在,我试图提取每年持续3小时的最大值。我尝试了这种滑动最大值方法,但它不起作用。k是我感兴趣的持续时间。简单地说,我需要每年多个时段的最大降水量总和(如3h、6h等)

对我的代码有任何建议或改进,或者有没有一种方法可以通过groupby实现它。我对python环境有点陌生,所以如果这个问题没有正确提出,请原谅

Stn;yyyymmddhh;rainfall 
xyz;1981010100;0.0
xyz;1981010101;0.0
xyz;1981010102;0.0
xyz;1981010103;0.0
xyz;1981010104;0.0
xyz;1981010105;0.0
xyz;1981010106;0.0
xyz;1981010107;0.0
xyz;1981010108;0.0
xyz;1981010109;0.4
xyz;1981010110;0.6
xyz;1981010111;0.1
xyz;1981010112;0.1
xyz;1981010113;0.0
xyz;1981010114;0.1
xyz;1981010115;0.6
xyz;1981010116;0.0
xyz;1981010117;0.0
xyz;1981010118;0.2
xyz;1981010119;0.0
xyz;1981010120;0.0
xyz;1981010121;0.0
xyz;1981010122;0.0
xyz;1981010123;0.0
xyz;1981010200;0.0

首先,必须将包含日期时间的列转换为类型为
datetime
Series
。您可以通过提供日期时间的格式来进行解析

df["yyyymmddhh"] = pd.to_datetime(df["yyyymmddhh"], format="%Y%M%d%H")
在获得正确的数据类型后,您必须将该列设置为索引,现在可以对时间序列数据使用
pandas
功能(在您的情况下重新采样)。
首先,将数据重采样到3小时窗口,并求和值。从中,您可以对年度数据重新采样,并获取每年所有3小时窗口的最大值

df.set_index("yyyymmddhh").resample("3H").sum().resample("Y").max()

# Output
yyyymmddhh  rainfall 
1981-12-31  1.1

Pandas已经为时间序列数据提供了一个
重采样
功能:您的问题是关于完成重采样(我更喜欢使用Pandas)还是关于您自己的实现?谢谢您的回答。正如我提到的,我愿意听取建议。我自己的实现似乎不起作用。我正在检查熊猫的重采样功能,但是我对日期时间索引感到困惑,非常感谢您的回复。它起作用了,但我想知道那些看起来有点奇怪的值,例如1981-12-31 STNSTN 8.01.13.1能否提供数据帧的一部分?现在添加了示例我根据更改的列命名编辑了函数。这是期望的输出吗?我没有得到您提供的奇怪示例。这正是所需的输出。但是,尽管使用了完全相同的函数,我还是没有得到它。我得到的是3列形式的输出YYYYMMDHH Stn NaN NaN NaN 1980-12-31 NaN NaN NaN
df.set_index("yyyymmddhh").resample("3H").sum().resample("Y").max()

# Output
yyyymmddhh  rainfall 
1981-12-31  1.1