我有以下数据框架。我想为多名特工找到一个最大的正面调查条纹。
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
发布于 2020-05-24 05:49:03
我们可以创建一个函数,将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
https://stackoverflow.com/questions/61986123
复制相似问题