【问题标题】:How to find the maximum overlap between columns of the same rows of two dataframes?如何找到两个数据帧的同一行的列之间的最大重叠?
【发布时间】:2021-09-27 00:39:59
【问题描述】:

给定两个数据帧,您将如何找到行之间开始值和结束值的最大重叠,并根据新数据帧中的重叠对它们进行配对,并通过减少重叠对其他重叠进行排名?

df_1
  start      end
a     1       10
b    20       50
c    70      100


df_2
  start     end
a     5      10
b    70     120
c    20      30

在这种情况下,df_1 的 a 行与 df_2 的 a 行配对,因为它们共享最大的重叠。 df_1 的 b 行与 df_2 的 c 行配对,因为它们也有最大的重叠,依此类推。

因此生成的 df_3 数据帧将是:

df_1    df_2
a       a
b       c
c       b

在此之后,您将如何按降序排列每一行的其余可能重叠,并且在可能性太多的情况下,仅按顺序排列 n 个最大重叠。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    尝试使用范围索引和overlap

    idx1 = pd.arrays.IntervalArray.from_arrays(
                                  df1['start'], 
                                  df1['end'], 
                                  closed='both')
    df2['new'] = df2.apply(lambda x : df1.index[idx1.overlaps(pd.Interval(x['start'], x['end'], closed='both'))][0],axis=1)
    df2
       start  end new
    a      5   10   a
    b     70  120   c
    c     20   30   b
    

    【讨论】:

      猜你喜欢
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      • 2019-12-06
      • 2020-05-08
      • 2020-06-10
      • 2012-05-12
      相关资源
      最近更新 更多