python - 如何找到两个数据帧的相同行的列之间的最大重叠?
问题描述
给定两个数据帧,您将如何找到行之间开始值和结束值的最大重叠,并根据新数据帧中的重叠对它们进行配对,并通过减少重叠对其他重叠进行排名?
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 个最大重叠。
解决方案
尝试使用范围索引和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
推荐阅读
- javascript - 有没有办法计算具有特定截止日期的猫鼬中的不同值
- oracle - 数据泵导入失败并显示“作业不存在”
- sql-server - SQL Server 数据库项目调试和发布的不同配置
- javascript - 我想要一个源代码来学习如何在我的 React Native 应用程序中使用 Redux 创建用户组?
- material-design-in-xaml - 继承的控件不继承 Material Design 风格
- angular - 在其他组件Angular中使用组件方法
- python - 显示 jinja 中字典列表中的所有值
- r - 用于计算张量积的 R 向量内存已耗尽
- node.js - 如何使用 Fetch() 和 Node.js 评估来自服务器的 API 响应并在客户端采取相应的行动
- nginx - 用于服务的 Cronjob