В кадре данных панд, например:
year month passengers
0 1949 January 112
1 1949 February 118
2 1949 March 132
3 1949 April 129
4 1949 May 121
5 1949 June 135
.
.
.
137 1960 June 535
138 1960 July 622
139 1960 August 606
140 1960 September 508
141 1960 October 461
142 1960 November 390
143 1960 December 432
Как я могу выделить (и выполнить расчеты) 3 месяца с наибольшим количеством пассажиров в год?
Тот же самый кадр данных может быть воспроизведен из набора данных морского происхождения:
import pandas as pd
import seaborn as sns
df = sns.load_dataset('flights')
df
Вот что я пробовал:
Следуя предложению в комментариях от к этой записи Я обнаружил, что могу переопределить фрейм данных, используя nlargest()
после переиндексации фрейма данных:
df = df.set_index(['year', 'month'])
df2 = df.groupby(level=0)['passengers'].nlargest(3)
df2
выход:
year year month
1949 1949 July 148
August 148
September 136
1950 1950 July 170
August 170
Но по какой-то причине year index
дублируется, и мне все равно придется переиндексировать, сгруппировать фрейм данных по годам и суммировать результаты. Это уже начинает запутываться, так что нет лучшего способа сделать это?
Вот и все, что нужно для легкого копирования:
import pandas as pd
import seaborn as sns
df = sns.load_dataset('flights')
df = df.set_index(['year', 'month'])
df2 = df.groupby(level=0)['passengers'].nlargest(3)
А вот форма желаемого выхода:
# Sum of top 3 months for each year (no index other than default pandas dataframe index)
year sum
0 1949 600 (the sum is made up)
1 1950 600
.
.
.
10 1960 600
Спасибо за любые предложения!
РЕДАКТИРОВАТЬ: Информация о системе:
Python 3.6.0
Панды 0.19.2
Windows 7