首先,关于我的问题。
我有一个数年的冠军联赛杯获胜者数据框。
像这样,注意团队名称是字符串。
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很新,并且没有很好地掌握它们。任何帮助将不胜感激!
答案 0 :(得分:1)
查看groupby
,transform
,cumcount
和cumsum
(http://pandas.pydata.org/pandas-docs/stable/groupby.html)上的pandas文档。
你可以通过团队分组并使用变换来对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
答案 1 :(得分:0)
我认为您只想将groupby
与Series.cumsum
一起使用。如:
df.groupby('team').cumsum()