我有一个数据框,其中包含战斗机的所有战斗,战斗编号(例如,是否是他们的第一,第二等),以及他们是否赢得了战斗。我想计算出战斗机在当前战斗之前获得的连续胜利数(即不包括他们是否赢得了当前战斗)。我目前正在Spyder中使用Python 3.7。
假设我们有以下数据框,如果战斗机赢得了战斗,则胜利= 1:
df = pd.DataFrame({'fighter' : ['A','A','B','C','C'],'fight_number' : ['1','2','3','4','1','2'],'win' : [0,1,1]})
fighter fight_number win
0 A 1 0
1 A 2 0
2 A 3 1
3 A 4 1
4 B 1 1
5 B 2 1
6 B 3 0
7 C 1 1
8 C 2 1
我知道要计算所有行的获胜次数,我可以采用以下方法实施建议的here解决方案:
grouper = (df.win != df.win.shift()).cumsum()
df['streak'] = df.groupby(grouper).cumsum()
产生:
fighter fight_number win streak
0 A 1 0 0
1 A 2 0 0
2 A 3 1 1
3 A 4 1 2
4 B 1 1 3
5 B 2 1 4
6 B 3 0 0
7 C 1 1 1
8 C 2 1 2
但是我需要的是将这种方法应用于数据框的子组(即每个战斗机),并且不将当前战斗的结果包括在连胜数中。因此,我基本上是在尝试让战斗机进入战斗时保持目前的连胜纪录。
因此,本示例中的目标输出为:
fighter fight_number win streak
0 A 1 0 0
1 A 2 0 0
2 A 3 1 0
3 A 4 1 1
4 B 1 1 0
5 B 2 1 1
6 B 3 0 2
7 C 1 1 0
8 C 2 1 1
我很高兴能对此提出任何建议,因为我是Python的新手。