Это дополнительный вопрос к Пандам: как подгруппировать (и суммировать) верхние N наблюдений в подкатегориях? Там было продемонстрировано, как вы можете найти сумму трех верхних месяцев за каждый год. в этом фрейме данных:
Пример кадра данных
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
Так что в итоге вы получите:
year passengers
0 1949 432
1 1950 498
2 1951 582
3 1952 690
4 1953 779
5 1954 859
6 1955 1026
7 1956 1192
8 1957 1354
9 1958 1431
10 1959 1579
11 1960 176
Число 432 for 1949
является суммой 148+148+136 for the months July, August and September.
Мой вопрос сейчас такой:
Можно ли выполнять те же вычисления и одновременно сохранять соответствующие подкатегории в виде списка в своем собственном столбце?
Желаемый выход
(я только проверил фактическую сумму за 1949 год. 1950 составлен):
year passengers months
0 1949 432 July, August, September
1 1950 498 August, September, December
2 1951 582 .
3 1952 690 .
4 1953 779 .
5 1954 859 .
6 1955 1026 .
7 1956 1192 .
8 1957 1354 .
9 1958 1431 .
10 1959 1579 .
11 1960 176 .
Воспроизводимый код и данные:
import pandas as pd
import seaborn as sns
df = sns.load_dataset('flights')
print(df.head())
df2 = df.groupby('year')['passengers'].apply(lambda x: x.nlargest(3).sum()).reset_index()
print(df2.head())
ДФ:
year month passengers
0 1949 January 112
1 1949 February 118
2 1949 March 132
3 1949 April 129
4 1949 May 121
df2:
year passengers
0 1949 432
1 1950 498
2 1951 582
3 1952 690
4 1953 779
Спасибо за любые предложения!