将多年数据框架中的重新采样限制为几个月

时间:2018-06-28 09:57:53

标签: python pandas resampling

考虑以下天气数据集(每3小时间隔50年的天气数据):

                     YEAR   M   D   H   WSP   HS
1957-09-01 06:00:00  1957   9   1   6   8.9  0.9
1957-09-01 09:00:00  1957   9   1   9   6.4  0.6
1957-09-01 12:00:00  1957   9   1  12   5.2  0.4
1957-09-01 15:00:00  1957   9   1  15   1.9  0.3
1957-09-01 18:00:00  1957   9   1  18   3.7  0.3
1957-09-01 21:00:00  1957   9   1  21   3.9  0.4
1957-09-02 00:00:00  1957   9   2   0   5.6  0.4
1957-09-02 03:00:00  1957   9   2   3   5.3  0.5

我需要将数据集重新采样到48小时内,并获取该间隔的最大HS值。然后,该值需要按月分组,以获取每个月50年期间的平均值。

但是,重采样通常可以包含两个月内的一系列值:

1957-09-04 12:00:00  1957   9   4  12   7.8  1.1
1957-09-04 15:00:00  1957   9   4  15   6.7  1.1
1957-09-04 18:00:00  1957   9   4  18   9.4  1.1
1957-09-04 21:00:00  1957   9   4  21   9.7  1.2
1957-09-05 00:00:00  1957   9   5   0   8.9  1.2
1957-09-05 03:00:00  1957   9   5   3   9.0  1.1

我只需要将重采样限制在一个月,这样整个数据集中的月份平均值就不会受到其他月份数据的影响。

2 个答案:

答案 0 :(得分:1)

首先获取一个月的数据,然后计算48个小时内的HS平均值(从第1天的00:00小时到第2天的24:00小时,依此类推[注意,最后一个期间可能是少于48小时],然后在下个月重复此操作,依此类推。要获得每月的平均值,请采用每月所有48小时内的平均值(取决于月份,分别为14、15或16)话虽如此,将一个月的数据取平均值并不容易得多,但我不确定为什么要在48小时内将其首先分组?

答案 1 :(得分:0)

注意:我用一些语音数据扩展了您的数据集,以更好地说明分组。还添加了日期时间的列名(DT)。数据集可以在这里找到:weather.csv

df = pd.DataFrame()
df = pd.read_csv('./data/weather.csv')

df['date'] = pd.to_datetime(df['DT'], format='%Y-%m-%d %H:%M:%S')

# Grouping by 48 hours with a base of 0 (so the start of the grouping window begins midnight - and without a time)
# The max returns the highest number from the HS column.
df_48h = df.groupby(pd.Grouper(key='date', freq='48h', base=0))['HS'].max()
print(df_48h)

# Output:
# date
# 1957-09-01    0.6
# 1957-09-03    0.9
# ...
# 1957-10-01    0.6
# 1957-10-03    0.9

# Group all the 'high' values by month and get the mean
df_mm = df_48h.groupby(pd.Grouper(freq='M')).mean()
print(df_mm)

# Output:
# date
# 1957-09-30    0.75
# 1957-10-31    0.75

我玩过的Jupyter笔记本可以在这里找到:pandas_48h_and_month_grouping.ipynb

希望它会有所帮助,尽情享受吧!