Сохранение исходного индекса при использовании pandas groupby - PullRequest
0 голосов
/ 18 июня 2020

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

import pandas as pd

dct = {
"date": ["2019-01-01", "2019-04-1", "2020-01-01"],
"high": [100, 150, 100],
}
df = pd.DataFrame(dct)
df.set_index("date",inplace=True)
df.index = [pd.Timestamp(i) for i in df.index]
df.index.name = "date" 

# date         high
# 2019-01-01   100
# 2019-04-01   150
# 2020-01-01   100

При использовании pandas groupby Im могу сгруппировать их по годам, но не получить нужную дату:

func = lambda x: x.year
df["high"].groupby(func).max()

# date    high
# 2019    150
# 2020    100

Мой желаемый результат - использовать pandas groupby и получить:

 # NOTE : the date index is like the original

 # date         high
 # 2019-04-01   150
 # 2020-01-01   100

Ответы [ 3 ]

1 голос
/ 18 июня 2020

Другой способ - использовать idxmax и loc доступ:

df.loc[df.groupby(df.index.year).high.idxmax()]

Вывод:

            high
date            
2019-04-01   150
2020-01-01   100
1 голос
/ 18 июня 2020

sort_values затем выполните groupby с tail

df.sort_values('high').groupby(df.index.year).tail(1)
            high
date            
2020-01-01   100
2019-04-01   150

Когда вы выполняете df["high"].groupby(func).max(), это series groupby not dataframe groupby, поэтому вывод будет не переносить индекс фрейма данных

0 голосов
/ 18 июня 2020

Вы также можете использовать nlargest и droplevel

func = lambda x: x.year

df["high"].groupby(func).nlargest(1).droplevel(0)

Out[7]:
date
2019-04-01    150
2020-01-01    100
Name: high, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...