Multi-index - получить максимум второго индекса для каждого первого индекса - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть фрейм данных с мультииндексом, который выглядит следующим образом:

ts                   ts2
2018-05-24 23:00:00  2018-05-24 00:00:00  5
                     2018-05-24 00:15:00  4 
                     2018-05-24 00:30:00  6 
                     2018-05-24 00:45:00  7

Я хотел бы получить для каждой даты / времени в индексе 1 максимальное значение индекса 2:

2018-05-24 23:00:00  2018-05-24 00:45:00  7

Это не может быть так сложно, но каким-то образом я не могу справиться с этим.

Я попытался нарезать цикл

for ts, new_df in df.groupby(level=0):
   print(new_df)

, что приводит к новому кадру данных в течение .... Кроме того, я могу получить максимальный индекс new_df

new_df.index.max()

Имея эту информацию, я смогу выбрать правильное значение (индексную пару) и построить нужный кадр данных. Однако я не могу справиться с этим .....

любая помощь приветствуется.

Спасибо

1 Ответ

0 голосов
/ 05 ноября 2018

Вы можете использовать idxmax с reset_index и выбирать по позициям с помощью iloc:

df = df.iloc[df.reset_index().groupby('ts')['ts2'].idxmax()]
print (df)
                                         val
ts                  ts2                     
2018-05-24 23:00:00 2018-05-24 00:45:00    7

Или используйте boolean indexing с Index.duplicated, но сначала sort_index:

df = df.sort_index()
df = df[~df.index.get_level_values(0).duplicated(keep='last')]
print (df)
                                         val
ts                  ts2                     
2018-05-24 23:00:00 2018-05-24 00:45:00    7
...