Кумулятивная частота появления строк
Для начала немного о моей проблеме.
У меня есть данные о победителях Кубка Лиги чемпионов, проиндексированные по годам.
Таким образом, названия команд записок являются строками.
year team need this year team wins to date
1 team1 1 team1 1
2 team2 2 team2 1
3 team1 3 team1 2
4 team3 4 team3 1
Я хотел бы создать новый столбец с кумулятивными выигрышами, чтобы я мог затем построить линейный график каждой команды и количество раз, когда они выиграли кубок. т.е. мне нужен год по оси x и кумулятивная частота по y, с 4 разными строками для 4 лучших команд.
Вероятно, есть простой способ использования функции count и цикла, но я довольно плохо знаком с Python и не очень хорошо разбираюсь в них. Любая помощь приветствуется!
2 ответа
Посмотрите на документацию панд на groupby
, transform
, cumcount
, а также cumsum
( http://pandas.pydata.org/pandas-docs/stable/groupby.html). Вы можете сгруппировать команду и использовать transform, чтобы выполнить cumsum on bool, независимо от того, является ли команда нулевой или нет.
df
Входные данные:
year team
0 1 team1
1 2 team2
2 3 team1
3 4 team3
Сделать преобразование
df['wins to date'] = df.groupby('team').transform(lambda x: x.notnull().cumsum())
df
или как DSM предлагает:
df['wins to date'] = df.groupby('team').cumcount()+1
выход
year team wins to date
0 1 team1 1
1 2 team2 1
2 3 team1 2
3 4 team3 1
Я думаю, что вы просто хотите использовать groupby
с Series.cumsum
, Как в:
df.groupby('team').cumsum()