我有以下数据框架。我想找到多个代理商的最大正向调查连胜。
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
我们可以创建一个函数来重置 cumsum
在 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