我正在寻找一种方法来计算组的条纹。对于每个组,如果之前的“结果”与当前的“结果”相同,则将这两个结果相加。如果先前的“result”与当前的“result”不同,或者没有先前的结果,那么它应该返回当前的结果。
任何帮助我们都将不胜感激
df_input = pd.DataFrame()
df_input['Name'] = ['A','B','A','A','C','C','B','A','B','C']
df_input['Result'] = [1,1,-1,-1,1,1,-1,1,-1,1]
df_output = pd.DataFrame()
df_output['Name'] = ['A','B','A','A','C','C','B','A','B','C']
df_output['Result'] = [1,1,-1,-1,1,1,-1,1,-1,1]
df_output['Streak'] = [1,1,-1,-2,1,2,-1,1,-2,3]
发布于 2021-10-16 22:29:20
首先创建一个组变量,为每个Name
中连续相同值的每个区块分配一个组
g = df.Result.groupby(df.Name).transform(lambda x: x.diff().ne(0).cumsum())
g
0 1
1 1
2 2
3 2
4 1
5 1
6 2
7 3
8 2
9 1
Name: Result, dtype: int32
根据Name
和组变量计算cumsum
:
df['Streak'] = df.Result.groupby([df.Name, g]).cumsum()
df
Name Result Streak
0 A 1 1
1 B 1 1
2 A -1 -1
3 A -1 -2
4 C 1 1
5 C 1 2
6 B -1 -1
7 A 1 1
8 B -1 -2
9 C 1 3
https://stackoverflow.com/questions/69601796
复制