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

如何用Pandas基于值列合并重复行并生成起止位置列?

Pandas合并连续相同value行并生成起止列

原始数据表:

Chrs    pos value
Chr1    1   9
Chr1    2   11
Chr1    3   13
Chr1    4   13
Chr1    5   13
Chr1    6   13
Chr1    7   14
Chr1    8   14
Chr1    9   14

目标格式:

Chrs    start end  value
Chr1    1     2    9
Chr1    2     3    11
Chr1    3     6    13
Chr1    7     9    14

实现代码

import pandas as pd

# 构造原始数据(如果是外部数据,替换成pd.read_csv等读取方式即可)
data = {
    'Chrs': ['Chr1']*9,
    'pos': [1,2,3,4,5,6,7,8,9],
    'value': [9,11,13,13,13,13,14,14,14]
}
df = pd.DataFrame(data)

# 生成连续相同value的分组键:value变化时分组编号+1
df['group'] = (df['value'] != df['value'].shift()).cumsum()

# 按分组聚合生成目标列
result = df.groupby('group').agg(
    Chrs=('Chrs', 'first'),
    start=('pos', 'first'),
    end=('pos', 'last'),
    value=('value', 'first')
).reset_index(drop=True)

print(result)

代码说明

  • 生成group列:通过对比当前行与上一行的value,当值发生变化时标记为True,再用cumsum()生成连续分组的编号,确保连续相同的value被分到同一组。
  • 分组聚合:对每个分组提取对应字段的首尾值,其中start取组内pos的第一个值,end取组内pos的最后一个值,Chrs和value取组内任意一个值即可(组内值一致)。
  • 最后通过reset_index(drop=True)清理分组索引,得到目标格式的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:07:22