Groupby / cumsum для фрейма данных с повторяющимися именами - PullRequest
0 голосов
/ 13 февраля 2020

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

df = pd.DataFrame({'Player':['John Smith', 'John Smith', 'John Smith', 'John Smith', 'John Smith'],
           'School':['Duke', 'Duke', 'Duke', 'Kentucky', 'Kentucky'],
           'Date':['1-1-20', '1-3-20', '1-7-20', '1-3-20', '1-08-20'],
           'Points Scored':['20', '30', '15', '8', '9']})

print(df)

     Player       School     Date    Points Scored
0  John Smith      Duke   1-1-20            20
1  John Smith      Duke   1-3-20            30
2  John Smith      Duke   1-7-20            15
3  John Smith  Kentucky   1-3-20             8
4  John Smith  Kentucky  1-08-20             9

Я пытался использовать df.groupby (by = ['Player', 'School', 'Date']). Sum (). groupby (level = [0]). cumsum () ... но это, похоже, не дифференцирует второй критерий. Я также пытался отсортировать значения по школе, но не смог найти там удачи. Ожидаемый результат будет выглядеть следующим образом:

  Player        School              Date     Points Scored  Cumulative Sum Points Scored
0  John Smith   Duke                  1-1-20          20              20                   
1  John Smith   Duke                  1-3-20          30              50
2  John Smith   Duke                  1-7-20          15              65
3  John Smith   Kentucky              1-3-20           8              8
4  John Smith   Kentucky              1-08-20          9              17

Заранее спасибо за помощь!

1 Ответ

1 голос
/ 13 февраля 2020
import numpy as np
import pandas as pd

df = pd.DataFrame({'Player':['John Smith', 'John Smith', 'John Smith', 'John     Smith', 'John Smith'],
       'School':['Duke', 'Duke', 'Duke', 'Kentucky', 'Kentucky'],
       'Date':['1-1-20', '1-3-20', '1-7-20', '1-3-20', '1-08-20'],
       'Points Scored':[20, 30, 15, 8, 9]}) # change to integer here

df['Cumulative Sum Points Scored'] = df.groupby(['Player','School'])['Points Scored'].apply(np.cumsum)

Выход:

   Player         School  Date         Points Scored      Cumulative Sum Points Scored
0  John Smith      Duke   1-1-20             20                            20
1  John Smith      Duke   1-3-20             30                            50
2  John Smith      Duke   1-7-20             15                            65
3  John Smith  Kentucky   1-3-20              8                             8
4  John Smith  Kentucky  1-08-20              9                            17
...