首页 > 解决方案 > 如何使用 pandas 为多名员工找到积极的调查记录

问题描述

我有以下数据框。我想找到多个代理的最大积极调查连续性。

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.xpandaspandas-groupby

解决方案


我们可以创建一个重置cumsumat的函数0。它基本上减去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

推荐阅读