df.groupby(.pdGrouper(freq=’D’)).idxmax выдает ошибку ValueError

#python #pandas #dataframe #datetime #time-series

#python #панды #фрейм данных #дату и время #временные ряды

Вопрос:

Я пытаюсь сгруппировать день и найти максимальное значение для каждого дня.

 df.loc[df.groupby(pd.Grouper(freq='D'))['High'].idxmax()]
  

Когда мой фрейм данных невелик и работает всего несколько дней подряд, он успешно запускается (я думаю, выдает ошибку с пропущенными выходными / праздничными днями)

                           InternalSymbol    Open    High     Low   Close  
CollectionTimestamp (CST)                                                  
2018-09-17 10:00:00                 GCZ8  1206.1  1209.7  1205.9  1208.3   
2018-09-18 09:00:00                 GCZ8  1205.6  1208.2  1205.2  1206.4   
2018-09-19 08:00:00                 GCZ8  1207.6  1211.0  1205.9  1210.0   
2018-09-20 10:00:00                 GCZ8  1211.0  1213.2  1208.1  1209.1   
2018-09-21 06:00:00                 GCZ8  1212.3  1212.7  1209.3  1209.7 
  

Когда я пытаюсь инкорпорировать весь мой набор данных (несколько лет, Вс-Пт, исключая рыночные праздники и т. Д.). Я получаю эту ошибку..

 ValueError: attempt to get argmax of an empty sequence
  

Я предполагаю, что это как-то связано с моей строкой кода в отношении freq=’D’ . Есть ли обходной путь для чего-то подобного?

Вот пример фрейма данных. Примечание, которое я оставил в данных 2018-09-24, поэтому оно приведет к ошибке, на которую я ссылаюсь, если вы удалите строки 2018-09-24, то .pdGrouper(freq=’D’) будет работать.

                           InternalSymbol    Open    High     Low   Close
CollectionTimestamp (CST)                                               
2018-09-17 06:00:00                 GCZ8  1202.1  1203.7  1201.5  1202.5
2018-09-17 07:00:00                 GCZ8  1202.5  1202.6  1200.8  1202.2
2018-09-17 08:00:00                 GCZ8  1202.3  1204.8  1202.1  1204.1
2018-09-17 09:00:00                 GCZ8  1204.1  1206.7  1203.4  1206.1
2018-09-17 10:00:00                 GCZ8  1206.1  1209.7  1205.9  1208.3
2018-09-17 11:00:00                 GCZ8  1208.2  1209.0  1207.0  1207.8
2018-09-17 12:00:00                 GCZ8  1207.8  1207.9  1206.5  1207.3
2018-09-17 13:00:00                 GCZ8  1207.2  1207.4  1205.3  1205.9
2018-09-17 14:00:00                 GCZ8  1205.9  1206.8  1204.6  1205.6
2018-09-17 15:00:00                 GCZ8  1205.7  1206.0  1204.6  1205.2
2018-09-18 06:00:00                 GCZ8  1203.7  1204.9  1202.9  1204.7
2018-09-18 07:00:00                 GCZ8  1204.8  1207.8  1204.6  1207.0
2018-09-18 08:00:00                 GCZ8  1207.0  1207.1  1204.1  1205.7
2018-09-18 09:00:00                 GCZ8  1205.6  1208.2  1205.2  1206.4
2018-09-18 10:00:00                 GCZ8  1206.3  1206.5  1202.2  1204.6
2018-09-18 11:00:00                 GCZ8  1204.7  1205.0  1203.1  1203.8
2018-09-18 12:00:00                 GCZ8  1203.8  1204.3  1202.7  1203.0
2018-09-18 13:00:00                 GCZ8  1203.0  1203.9  1201.9  1203.0
2018-09-18 14:00:00                 GCZ8  1203.0  1203.3  1201.7  1202.4
2018-09-18 15:00:00                 GCZ8  1202.3  1203.0  1201.4  1202.9
2018-09-19 06:00:00                 GCZ8  1207.3  1208.4  1207.2  1207.6
2018-09-19 07:00:00                 GCZ8  1207.6  1208.2  1206.8  1207.6
2018-09-19 08:00:00                 GCZ8  1207.6  1211.0  1205.9  1210.0
2018-09-19 09:00:00                 GCZ8  1210.0  1210.1  1206.0  1207.9
2018-09-19 10:00:00                 GCZ8  1207.9  1208.9  1205.7  1208.1
2018-09-19 11:00:00                 GCZ8  1208.1  1210.8  1207.4  1208.2
2018-09-19 12:00:00                 GCZ8  1208.3  1209.5  1208.1  1208.9
2018-09-19 13:00:00                 GCZ8  1208.9  1209.0  1207.2  1207.5
2018-09-19 14:00:00                 GCZ8  1207.4  1208.9  1207.4  1208.6
2018-09-19 15:00:00                 GCZ8  1208.6  1208.7  1207.6  1208.3
2018-09-20 06:00:00                 GCZ8  1207.4  1208.3  1206.8  1207.8
2018-09-20 07:00:00                 GCZ8  1207.8  1210.4  1207.2  1210.2
2018-09-20 08:00:00                 GCZ8  1210.2  1212.5  1209.7  1211.7
2018-09-20 09:00:00                 GCZ8  1211.8  1212.4  1209.8  1211.0
2018-09-20 10:00:00                 GCZ8  1211.0  1213.2  1208.1  1209.1
2018-09-20 11:00:00                 GCZ8  1209.1  1209.6  1207.6  1208.2
2018-09-20 12:00:00                 GCZ8  1208.2  1210.5  1208.0  1210.4
2018-09-20 13:00:00                 GCZ8  1210.3  1211.6  1209.5  1210.6
2018-09-20 14:00:00                 GCZ8  1210.5  1211.4  1209.6  1211.3
2018-09-20 15:00:00                 GCZ8  1211.4  1212.6  1211.2  1211.9
2018-09-21 06:00:00                 GCZ8  1212.3  1212.7  1209.3  1209.7
2018-09-21 07:00:00                 GCZ8  1209.7  1210.4  1208.6  1209.1
2018-09-21 08:00:00                 GCZ8  1209.0  1209.8  1199.3  1200.1
2018-09-21 09:00:00                 GCZ8  1200.2  1202.0  1196.0  1200.8
2018-09-21 10:00:00                 GCZ8  1200.9  1205.6  1200.9  1204.3
2018-09-21 11:00:00                 GCZ8  1204.3  1204.7  1199.8  1200.6
2018-09-21 12:00:00                 GCZ8  1200.6  1203.0  1200.3  1201.7
2018-09-21 13:00:00                 GCZ8  1201.6  1203.3  1200.3  1201.3
2018-09-21 14:00:00                 GCZ8  1201.4  1201.5  1200.2  1201.5
2018-09-21 15:00:00                 GCZ8  1201.6  1203.5  1201.5  1203.3
2018-09-24 06:00:00                 GCZ8  1203.3  1204.1  1202.9  1203.0
2018-09-24 07:00:00                 GCZ8  1203.0  1204.9  1202.9  1204.2
2018-09-24 08:00:00                 GCZ8  1204.3  1205.4  1202.5  1202.6
2018-09-24 09:00:00                 GCZ8  1202.5  1208.6  1202.3  1207.1
2018-09-24 10:00:00                 GCZ8  1207.1  1208.8  1205.9  1207.8
2018-09-24 11:00:00                 GCZ8  1207.7  1208.3  1204.7  1206.1
2018-09-24 12:00:00                 GCZ8  1206.1  1206.2  1204.7  1205.6
2018-09-24 13:00:00                 GCZ8  1205.5  1205.5  1203.5  1204.2
2018-09-24 14:00:00                 GCZ8  1204.1  1204.3  1203.3  1203.8
2018-09-24 15:00:00                 GCZ8  1203.7  1204.2  1202.9  1203.3
  

Ответ №1:

Попробуйте сгруппировать в существующие дни. Использование grouper или resample попытается заполнить пропущенные дни NAN, у которых, так сказать, нет максимума, поэтому нет существующего индекса, который ассоциируется с этими пропущенными днями:

 df.loc[df.groupby(df.index.date)["High"].idxmax()]


                          InternalSymbol    Open    High     Low   Close
CollectionTimestamp (CST)                                               
2018-09-17 10:00:00                 GCZ8  1206.1  1209.7  1205.9  1208.3
2018-09-18 09:00:00                 GCZ8  1205.6  1208.2  1205.2  1206.4
2018-09-19 08:00:00                 GCZ8  1207.6  1211.0  1205.9  1210.0
2018-09-20 10:00:00                 GCZ8  1211.0  1213.2  1208.1  1209.1
2018-09-21 06:00:00                 GCZ8  1212.3  1212.7  1209.3  1209.7
2018-09-24 10:00:00                 GCZ8  1207.1  1208.8  1205.9  1207.8