You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas按条件合并连续行的最高效计算实现方案

高效实现方案

可以使用pandas向量化分组聚合操作实现需求,避免逐行遍历,在数据量较大时效率提升非常明显,具体实现如下:

核心逻辑

我们可以给每一个head以及它后面跟着的所有连续tail分配同一个分组ID,之后按分组聚合即可:

  • 分组规则:每次遇到position为head的行时,分组ID加1,后续连续的tail行复用同一个分组ID,通过布尔序列累加cumsum()即可快速生成分组ID
  • 聚合规则:
    • position取分组内最后一行的值,天然符合「有后续tail则标记为tail,否则保留head」的规则
    • start取分组内第一行的值
    • end取分组内最后一行的值

实现代码

import pandas as pd

# 原始DataFrame
df = pd.DataFrame({
    'position': ['head', 'tail', 'head', 'head', 'head', 'tail', 'tail', 'head'], 
    'start': [2, 13, 54, 320, 654, 677, 3430, 9000],
    'end': [4, 15, 564, 390, 674, 679, 6000, 9010],
})

# 生成分组ID
df['group'] = (df['position'] == 'head').cumsum()

# 按分组聚合得到结果
result = df.groupby('group').agg(
    position=('position', 'last'),
    start=('start', 'first'),
    end=('end', 'last')
).reset_index(drop=True)

print(result)

输出验证

运行代码得到的结果和预期完全一致:

position  start   end
0     tail      2    15
1     head     54   564
2     head    320   390
3     tail    654  6000
4     head   9000  9010

效率说明

这种向量化操作的时间复杂度为O(n),所有运算都在pandas底层C语言层执行,相比Python层的iterrows遍历,在十万行以上的数据集中,速度可以快几十到上百倍。

内容的提问来源于stack exchange,提问作者SantoshGupta7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:15:04