提问者:小点点

在Python中将每小时数据帧转换为每月总计数据帧


我有一个包含2013年至2020年间每小时降水数据(tp)的Pandas数据帧,该数据帧称为df:

                      tp
time                    
2013-01-01 00:00:00  0.1
2013-01-01 01:00:00  0.1
2013-01-01 02:00:00  0.1
2013-01-01 03:00:00  0.0
2013-01-01 04:00:00  0.2
                 ...
2020-12-31 19:00:00  0.2
2020-12-31 20:00:00  0.1
2020-12-31 21:00:00  0.0
2020-12-31 22:00:00  0.1
2020-12-31 23:00:00  0.0

我试图将这个每小时的数据集转换为每年的每月总数,然后我想取每月总降雨量的平均值,这样我最终得到一个每月12行的数据框,显示整个时期的平均总降雨量。

我尝试过重新取样功能:

df.resample('M').mean()

但是,这会输出以下内容,而不是我想要实现的:

                 tp1
time                
2013-01-31  0.121634
2013-02-28  0.318097
2013-03-31  0.356973
2013-04-30  0.518160
2013-05-31  0.055290
             ...
2020-09-30  0.132713
2020-10-31  0.070817
2020-11-30  0.060525
2020-12-31  0.040002
2021-01-31  0.000000

[97 rows x 1 columns]

当它将每小时的数据转换为每月的数据时,我想显示多年来的平均降雨量。

例如。

一月柱=2013年至2020年一月平均降雨量。


共1个答案

匿名用户

假设您的索引是DatetimeIndex,您可以使用:

out = df.groupby(df.index.month).mean()
print(out)

# Output
           tp1
time          
1     0.498262
2     0.502057
3     0.502644
4     0.496880
5     0.499100
6     0.497931
7     0.504981
8     0.497841
9     0.499646
10    0.499804
11    0.506938
12    0.501172

设置:

import pandas as pd
import numpy as np

np.random.seed(2022)
dti = pd.date_range('2013-01-31', '2021-01-31', freq='H', name='time')
df = pd.DataFrame({'tp1': np.random.random(len(dti))}, index=dti)
print(df)

# Output
                          tp1
time                         
2013-01-31 00:00:00  0.009359
2013-01-31 01:00:00  0.499058
2013-01-31 02:00:00  0.113384
2013-01-31 03:00:00  0.049974
2013-01-31 04:00:00  0.685408
...                       ...
2021-01-30 20:00:00  0.021295
2021-01-30 21:00:00  0.275759
2021-01-30 22:00:00  0.367263
2021-01-30 23:00:00  0.777680
2021-01-31 00:00:00  0.021225

[70129 rows x 1 columns]