基于另一列合并熊猫数据框中的间隔

时间:2021-07-15 08:01:46

标签: python-3.x pandas numpy-ndarray

我有一个如下所示的 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 在 name 列中,最低起始值为 110,最高结束值为 200。因此,新数据帧的起始值为 110,结束值为 200。我怎样才能做到这一点?将不胜感激。

2 个答案:

答案 0 :(得分:3)

从这里开始

     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

答案 1 :(得分:2)

如果可能,通过聚合 minmaxnameID 列简化输出,在输出使用中具有相同的组顺序和相同的列顺序:

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