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

如何用Pandas对连续相同分组键的基因组区间进行聚合?

解决连续区间聚合的实现方法

核心思路

要实现仅聚合连续的同分组行,关键是先给连续的同组行打上唯一分组标记,再基于标记聚合区间。普通groupby无法区分连续/非连续的同组行,而通过生成连续组ID就能解决这个问题。

具体步骤(Pandas实现)

  1. 先排序:确保数据按染色体、臂、起始位置排序,保证连续的区间在DataFrame中是相邻行
df = df.sort_values(['Chromosome', 'arm', 'Start'])
  1. 生成连续组标记:对比当前行与上一行的Chromosome、arm、ratio_median,只要任一字段不同,就生成新的组ID
# 标记当前行与上一行是否属于不同组
is_new_group = (df[['Chromosome', 'arm', 'ratio_median']] != df[['Chromosome', 'arm', 'ratio_median']].shift()).any(axis=1)
# 累加标记生成连续组ID
df['group_id'] = is_new_group.cumsum()
  1. 按组聚合区间:基于组ID和分组字段,取Start最小值、End最大值
result = df.groupby(['group_id', 'Chromosome', 'arm', 'ratio_median']).agg(
    Start=('Start', 'min'),
    End=('End', 'max')
).reset_index(drop=True)

原理说明

  • shift()将上一行的分组字段下移,与当前行对比,判断是否进入新组
  • cumsum()对新组标记累加,让连续的同组行拥有相同的group_id,非连续的同组行则对应不同group_id
  • 最终按group_id分组聚合,就能避免把非连续的同区间合并

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:05:58