Pandas队连胜号码

2024-05-16 16:34:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python熊猫数据框,其中包含一些球队在几个时间段内的连胜记录,我想按时间顺序确定连胜记录。所以,我得到的是:

import pandas as pd
data = pd.DataFrame({'period': list(range(1,7))+list(range(1,6)),
    'team_id':       ['A']*6 + ['B']*5,
    'win':           [1,1,1,0,1,1,1,0,0,1,1],
    'streak_length': [1,2,3,0,1,2,1,0,0,1,2]})
print(data)

我想要的是:

result = pd.DataFrame({'period': list(range(1,7))+list(range(1,6)),
    'team_id':       ['A']*6 + ['B']*5,
    'win':           [1,1,1,0,1,1,1,0,0,1,1],
    'streak_length': [1,2,3,0,1,2,1,0,0,1,2],
    'streak_id':     [1,1,1,None,2,2,1,None,None,2,2]})
print(result)

我试着按team_id分组并在条纹长度上求和,但它可以重复,所以我认为这不起作用。感谢您的帮助!你知道吗


Tags: noneiddataframedata记录rangeresultlength
1条回答
网友
1楼 · 发布于 2024-05-16 16:34:34

通过^{}^{}^{}创建连续的组,在win中只过滤1,在lambda函数中使用^{}^{}

m = data['win'].eq(1)
g = data['win'].ne(data['win'].shift()).cumsum()

data['streak_id'] = g[m].groupby(data['team_id']).transform(lambda x: pd.factorize(x)[0] + 1)
print (data)
    period team_id  win  streak_length  streak_id
0        1       A    1              1        1.0
1        2       A    1              2        1.0
2        3       A    1              3        1.0
3        4       A    0              0        NaN
4        5       A    1              1        2.0
5        6       A    1              2        2.0
6        1       B    1              1        1.0
7        2       B    0              0        NaN
8        3       B    0              0        NaN
9        4       B    1              1        2.0
10       5       B    1              2        2.0

相关问题 更多 >