如何利用pandas找到多个员工的正向调查连胜率?

问题描述 投票:1回答:1

我有以下数据框架。我想找到多个代理商的最大正向调查连胜。

data = {'Name':['Ramu', 'Aana', 'Rafi', 'Ramu','Aana','Ramu','Aana','Rafi','Ramu','Aana','Rafi','Rafi','Rafi'], 'Score':[1,0,1,1,1,1,1,0,1,1,0,1,1]} 

Name    Survey  
Ramu    1       
Aana    0       
Rafi    1       
Ramu    1       
Aana    1       
Ramu    1       
Aana    1       
Rafi    0       
Ramu    1       
Aana    1 
Rafi    0
Rafi    1
Rafi    1

我希望输出是这样的。请帮助我实现这个目标。

Name    positive_survey_max_streak  
Ramu    4      
Aana    3       
Rafi    2       
python-3.x pandas pandas-groupby
1个回答
1
投票

我们可以创建一个函数来重置 cumsum0. 它基本上是分流的 1 其中 Score = 0. 然后我们使用 GroupBy 两次。

def cumsum_reset(arr):
    arr = arr.cumsum() - arr.cumsum().where(~arr).ffill().fillna(0).astype(int)

    return arr

dfg = (
    df['Score'].eq(1)
    .groupby(df['Name']).apply(cumsum_reset)
    .groupby(df['Name']).max()
    .reset_index(name='positive_survey_max_streak')
)

输出

   Name  positive_survey_max_streak
0  Aana                           3
1  Rafi                           2
2  Ramu                           4
© www.soinside.com 2019 - 2024. All rights reserved.