如何为Pandas DataFrame中start与end间的每组行按序编号?
解决方案
先确认原始数据:
import pandas as pd df = pd.DataFrame({ 'value': [1, 2, 3, 4, 5, 6, 7, 8, 9], 'event': ['start', '', '', 'end', 'start', '', 'end', 'start', 'end'] })
1. 生成区间组编号
通过标记event列的start事件并累加,得到每个start-end区间的唯一组ID:
# 标记组起始点,累加后生成组编号 df['group_id'] = (df['event'] == 'start').cumsum()
这里df['event'] == 'start'会生成布尔序列,cumsum()将True视为1、False视为0累加,每遇到一个start组编号就递增,后续行直到下一个start前都属于同一组。
2. 生成区间内顺序编号
基于组编号分组后,计算每组内的顺序行号:
# 按组编号分组,生成组内从1开始的顺序编号 df['sequence_num'] = df.groupby('group_id').cumcount() + 1
cumcount()会为每组内的行生成从0开始的索引,加1后得到从1起始的顺序编号。
最终处理后的结果:
print(df)
输出:
value event group_id sequence_num 0 1 start 1 1 1 2 1 2 2 3 1 3 3 4 end 1 4 4 5 start 2 1 5 6 2 2 6 7 end 2 3 7 8 start 3 1 8 9 end 3 2
内容的提问来源于stack exchange,提问作者Yesauir
相关产品推荐
相关产品推荐

