2 回答

TA贡献1856条经验 获得超11个赞
使用boolean mask连同DataFrame.cumsum:
df['case_id'] = (~df['case'].eq(df['case'].shift(1).fillna(df.loc[0,'case'])) |
df['y'].shift(1).fillna(0)).cumsum()+1
print(df)
case y year caseid
0 A 0 2016 1
1 A 1 2017 1
2 A 0 2018 2
3 A 0 2019 2
4 B 0 2016 3
5 B 1 2017 3
6 B 0 2018 4
7 B 0 2019 4
8 C 0 2016 5
9 C 0 2017 5
10 C 1 2018 5
11 C 0 2019 6

TA贡献1804条经验 获得超2个赞
这有效:
df['case_id'] = ((~(df.case == df.case.shift())) | (df.y.shift()==1)).cumsum()
致谢:@Quang Hoang(仅缺少一个括号。)
添加回答
举报