Как найти сумму из n самых больших значений по группе значений в pandas кадре данных? - PullRequest
1 голос
/ 17 марта 2020

DataFrame имеет две группы столбцов "grps" и значения "vals":

df = pd.DataFrame({'grps': list('aaabbcaabcccbbc'), 
                   'vals': [12,345,3,1,45,14,4,52,54,23,235,21,57,3,87]})

для каждой группы, мне нужно найти сумму трех самых больших значений. Я должен закончить с кадром данных следующим образом:

grps
a    409
b    156
c    345

Я пробовал это, но это не работает:

df.groupby('grps').nlargest(3, 'vals').sum()

Ответы [ 2 ]

3 голосов
/ 17 марта 2020

Альтернатива apply:

df.groupby('grps')['vals'].nlargest(3).sum(level=0)
2 голосов
/ 17 марта 2020

Попробуйте это выражение:

df.groupby('grps').apply(lambda x: x.vals.nlargest(3).sum())
...