У меня есть Pandas DataFrame с несколькими станциями и прогнозируемыми почасовыми порывами ветра ("gust_speed") для каждой станции. Мне нужно найти максимальный порыв ветра для каждой станции на каждый день, а также время, в которое этот порыв возникает.
pd_df
Out[24]:
station gust_speed
valid_dt
2020-05-21 15:00:00 AMO 6
2020-05-21 16:00:00 AMO 8
2020-05-21 17:00:00 AMO 11
2020-05-21 18:00:00 AMO 17
2020-05-21 19:00:00 AMO 19
2020-05-21 20:00:00 AMO 20
2020-05-21 21:00:00 AMO 21
2020-05-21 22:00:00 AMO 22
2020-05-21 23:00:00 AMO 24
2020-05-22 00:00:00 AMO 22
2020-05-22 01:00:00 AMO 18
2020-05-22 02:00:00 AMO 13
2020-05-22 03:00:00 AMO 8
2020-05-22 04:00:00 AMO 5
2020-05-22 05:00:00 AMO 2
2020-05-22 06:00:00 AMO 1
2020-05-22 07:00:00 AMO 2
2020-05-22 08:00:00 AMO 2
2020-05-22 09:00:00 AMO 3
2020-05-22 10:00:00 AMO 2
2020-05-22 11:00:00 AMO 3
2020-05-22 12:00:00 AMO 4
2020-05-22 13:00:00 AMO 3
2020-05-22 14:00:00 AMO 2
2020-05-22 15:00:00 AMO 7
2020-05-22 16:00:00 AMO 7
2020-05-22 17:00:00 AMO 10
2020-05-22 18:00:00 AMO 13
2020-05-22 19:00:00 AMO 19
2020-05-22 20:00:00 AMO 21
... ...
2020-05-23 19:00:00 YSA 21
2020-05-23 20:00:00 YSA 22
2020-05-23 21:00:00 YSA 22
2020-05-23 22:00:00 YSA 23
2020-05-23 23:00:00 YSA 22
2020-05-24 00:00:00 YSA 20
2020-05-24 01:00:00 YSA 17
2020-05-24 02:00:00 YSA 14
2020-05-24 03:00:00 YSA 4
2020-05-24 04:00:00 YSA 0
2020-05-24 05:00:00 YSA 1
2020-05-24 06:00:00 YSA 1
2020-05-24 07:00:00 YSA 3
2020-05-24 08:00:00 YSA 3
2020-05-24 09:00:00 YSA 4
2020-05-24 10:00:00 YSA 5
2020-05-24 11:00:00 YSA 0
2020-05-24 12:00:00 YSA 7
2020-05-24 13:00:00 YSA 3
2020-05-24 14:00:00 YSA 5
2020-05-24 15:00:00 YSA 8
2020-05-24 16:00:00 YSA 11
2020-05-24 17:00:00 YSA 14
2020-05-24 18:00:00 YSA 13
2020-05-24 19:00:00 YSA 19
2020-05-24 20:00:00 YSA 20
2020-05-24 21:00:00 YSA 21
2020-05-24 22:00:00 YSA 23
2020-05-24 23:00:00 YSA 22
2020-05-25 00:00:00 YSA 19
[15826 rows x 2 columns]
Используя GroupBy, я сгруппировал данные по станциям, затем пересчитал их, чтобы получить дневной максимум:
daily_max=pd_df.groupby(['station']).resample('D').max()
daily_max
Out[28]:
station gust_speed
station valid_dt
AMO 2020-05-21 AMO 24
2020-05-22 AMO 24
2020-05-23 AMO 23
2020-05-24 AMO 24
2020-05-25 AMO 22
ANE 2020-05-21 ANE 55
2020-05-22 ANE 21
2020-05-23 ANE 20
2020-05-24 ANE 23
2020-05-25 ANE 20
ARH 2020-05-21 ARH 20
2020-05-22 ARH 21
2020-05-23 ARH 19
2020-05-24 ARH 21
2020-05-25 ARH 21
AVO 2020-05-21 AVO 26
2020-05-22 AVO 29
2020-05-23 AVO 28
2020-05-24 AVO 27
2020-05-25 AVO 24
AVY 2020-05-21 AVY 21
2020-05-22 AVY 21
2020-05-23 AVY 20
2020-05-24 AVY 22
2020-05-25 AVY 21
BAJC1 2020-05-21 BAJC1 24
2020-05-22 BAJC1 22
2020-05-23 BAJC1 22
2020-05-24 BAJC1 25
2020-05-25 BAJC1 22
... ...
Мне также нужно время, в которое возникает максимальная скорость ветра. Использование idxmax () с тем же кодом вместо max () возвращает эту ошибку:
AttributeError: 'DatetimeIndexResamplerGroupby' object has no attribute 'idxmax'
Итак, я попытался использовать Grouper, но не уверен, как сначала сгруппировать по станции:
daily_max=pd_df.groupby(pd.Grouper(freq='D')).gust_speed.idxmax()
daily_max
Out[35]:
valid_dt
2020-05-21 2020-05-21 22:00:00
2020-05-22 2020-05-22 23:00:00
2020-05-23 2020-05-23 08:00:00
2020-05-24 2020-05-24 05:00:00
2020-05-25 2020-05-25 00:00:00
Freq: D, Name: gust_speed, dtype: datetime64[ns]
Это, конечно, возвращает время максимального порыва ветра со всех станций для каждого дня, что бесполезно.
Желаемый результат будет показывать дату и время максимальная скорость, станция и значение максимальной скорости. Так что единственное, чего не хватает, - это время, в которое дневной максимум произошел для каждой станции.
Заранее спасибо!