【问题标题】:Merge intervals in pandas dataframe based on another column基于另一列合并熊猫数据框中的间隔
【发布时间】:2021-07-15 08:01:46
【问题描述】:

我有一个如下所示的 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。我怎样才能做到这一点?我们将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    从这里开始

         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
    

    【讨论】:

      【解决方案2】:

      如果可能,通过聚合 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
      

      【讨论】:

        猜你喜欢
        • 2014-09-15
        • 1970-01-01
        • 1970-01-01
        • 2022-09-29
        • 2021-04-13
        • 2021-04-18
        • 2020-05-18
        • 2019-06-23
        • 1970-01-01
        相关资源
        最近更新 更多