根据另一列合并 pandas 数据框中的间隔

Merge intervals in pandas dataframe based on another column

我有一个 pandas 数据框,如下所示:

    ID     start   end     name
0   1       119    200      ss
1   1       118    156      ss  
2.  1       110    200      ss
3   1       15     25       me   
4   4       30     40       gg
5   4       30     55       gg

我想做的是合并具有相同名称(名称列)且坐标(开始,结束)重叠的重叠区间。因此生成的数据框将如下所示:

    ID     start   end     name
0   1       110    200      ss
1   1       15     25       me   
2   4       30     55       gg

例如,对于名称列中的 ss,最低起始值为 110,最高结束值为 200。因此,新数据帧的起始值为 110,结束值为 200 .我怎样才能做到这一点?将不胜感激。

从此开始

     ID  start  end name
0.0   1    119  200   ss
1.0   1    118  156   ss
2.0   1    110  200   ss
3.0   1     15   25   me
4.0   4     30   40   gg
5.0   4     30   55   gg

我们可以分组并聚合最小值和最大值。对于我们只想保持相同值的那些,我们可以使用 min 来抓取第一个。

df.groupby('name').agg({'ID': min, 'start': min, 'end': max, 'name': min})

结果

      ID  start  end name
name                     
gg     4     30   55   gg
me     1     15   25   me
ss     1    110  200   ss

如果可能,通过聚合 minmax 每个 nameID 列简化输出,在输出中使用相同的组顺序和相同的列顺序:

df1 = (df.groupby(['name', 'ID'], sort=False, as_index=False)
         .agg({'start': min, 'end': max})
         .reindex(df.columns, axis=1))
print (df1)
   ID  start  end name
0   1    110  200   ss
1   1     15   25   me
2   4     30   55   gg