如何用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
相关产品推荐
相关产品推荐

