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

pandas如何基于两列合并满足起止时间连续条件的多行数据

pandas区间合并最优实现方案

你可以通过分组打标+二次聚合的方式实现需求,性能远高于iterrows遍历,完整实现代码如下:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    "Name1": ["aaa", "aaa", "aaa", "ccc", "ccc", "ccc"],
    "Name2": ["bbb", "bbb", "bbb", "ddd", "ddd", "ddd"],
    "Start": [1, 2, 30, 100, 145, 160],
    "End": [2, 22, 42, 141, 160, 178]
})

# 1. 按Name1、Name2分组,为可合并的连续区间生成相同分组标记
df["merge_flag"] = df.groupby(["Name1", "Name2"], group_keys=False).apply(
    lambda g: (g["Start"] != g["End"].shift(fill_value=-1)).cumsum()
)

# 2. 按名称字段+合并标记分组聚合,得到最终结果
result = df.groupby(["Name1", "Name2", "merge_flag"], as_index=False).agg(
    Start=("Start", "min"),
    End=("End", "max")
).drop(columns="merge_flag")

print(result)

逻辑说明

  • 第一步先限定仅在Name1、Name2取值相同的组内做判断,g["End"].shift()会取同组内上一行的End值,和当前行Start对比,不相等则认为是新的独立区间,累加得到的merge_flag相同的行即为可合并的连续区间
  • 第二步聚合时取每个合并组的最小Start和最大End,即可得到合并后的结果
  • 该方案时间复杂度为O(n),数据量越大相比iterrows的性能优势越明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:42:03