pandas- месяц возврата, содержащий максимальное значение для каждого года - PullRequest
0 голосов
/ 17 октября 2018

У меня есть такой фрейм данных:

Year Month Value
2017  1     100
2017  2      1
2017  4      2
2018  3      88
2018  4      8
2019  5      87
2019  6      1

Я бы хотел, чтобы этот фрейм возвращал месяц и значение для каждого года, где значение является максимальным:

year  month  value
2017    1      100
2018    3      88
2019    5      87

I 'мы пытались сделать что-то вроде df=df.groupby(["Year","Month"])['Value']).max(), однако он возвращает полный набор данных, потому что каждая пара год / месяц уникальна (я считаю).

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Вот решение, которое также обрабатывает возможность дублирования:

m = df.groupby('Year')['Value'].transform('max') == df['Value']
dfmax = df.loc[m]

Полный пример:

import pandas as pd

data = '''\
Year Month Value
2017  1     100
2017  2      1
2017  4      2
2018  3      88
2018  4      88
2019  5      87
2019  6      1'''

fileobj = pd.compat.StringIO(data)
df = pd.read_csv(fileobj, sep='\s+')
m = df.groupby('Year')['Value'].transform('max') == df['Value']
print(df[m])

   Year  Month  Value
0  2017      1    100
3  2018      3     88
4  2018      4     88
5  2019      5     87
0 голосов
/ 17 октября 2018

Вы можете получить индекс, где верхнее значение встречается с .groupby(...).idxmax(), и использовать его для индексации в исходный фрейм данных:

In [28]: df.loc[df.groupby("Year")["Value"].idxmax()]
Out[28]:
   Year  Month  Value
0  2017      1    100
3  2018      3     88
5  2019      5     87
...