Pandas DataFrame如何将连续同值行合并为含起止信息的记录
Pandas实现连续相同score折叠的方法
核心是先为每一段连续相同score的行生成独立分组标识,再按分组聚合计算索引i的起止值,避免把不连续的同score段错误合并。
完整实现代码
import pandas as pd # 1. 构造原始测试数据(如果是你自己的现有数据,跳过这步直接用你的df即可) df = pd.DataFrame({ 'i': [5,6,7,8,9,15,30,31,32,10,11,20,21,22], 'score': [3.0,3.0,3.0,11.0,11.0,10.0,1.0,1.0,1.0,8.0,8.0,1.0,1.0,1.0] }) # 2. 生成连续块分组ID:当前行score和上一行不同时,分组号自增 df['block_tag'] = (df['score'] != df['score'].shift()).cumsum() # 3. 按分组聚合,提取每个连续块的起止i值和对应score res = df.groupby('block_tag', as_index=False).agg( start=('i', 'min'), end=('i', 'max'), score=('score', 'first') )[['start', 'end', 'score']]
运行结果
执行代码后得到的res和预期输出完全一致:
start end score 0 5 7 3.0 1 8 9 11.0 2 15 15 10.0 3 30 32 1.0 4 10 11 8.0 5 20 22 1.0
适配说明
如果你的原始数据里i是DataFrame的索引而非普通列,先执行下面的命令把索引转为列,再跑上述逻辑即可:
df = df.reset_index(names='i')
内容的提问来源于stack exchange,提问作者kaurwonderz
相关产品推荐
相关产品推荐

