我有一个数据框,里面有一个战士的所有战斗,战斗编号(例如,如果是他们的第一次,第二次,等等),以及他们是否赢得了战斗。我想计算一个战士在当前战斗之前获得的连续胜利数(即不包括他们是否赢得当前战斗)。我目前正在Spyder中使用Python3.7。你知道吗
假设我们有以下数据帧,其中win=1,如果战斗机赢得了战斗:
df = pd.DataFrame({'fighter' : ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'],
'fight_number' : ['1', '2', '3', '4', '1', '2', '3', '1', '2'],
'win' : [0, 0, 1, 1, 1, 1, 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还很陌生。你知道吗
我想出的一个解决方案是受jezrael之前发布(但已删除)的答案启发的:
产生目标输出:
它似乎也适用于其他测试示例:
相关问题 更多 >
编程相关推荐