考虑以下天气数据集(每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
我只需要将重采样限制在一个月,这样整个数据集中的月份平均值就不会受到其他月份数据的影响。
答案 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
希望它会有所帮助,尽情享受吧!