首页 > 解决方案 > 如何找到两个数据帧的相同行的列之间的最大重叠?

问题描述

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

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 个最大重叠。

标签: pythonpandas

解决方案


尝试使用范围索引和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

推荐阅读