基于间隔重叠合并两个数据帧

2024-09-27 02:27:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧A和B:

例如:

import pandas as pd
import numpy as np
In [37]:
A = pd.DataFrame({'Start': [10, 11, 20, 62, 198], 'End': [11, 11, 35, 70, 200]})

A[["Start","End"]]
Out[37]:
Start   End
0   10  11
1   11  11
2   20  35
3   62  70
4   198 200
In [38]:
B = pd.DataFrame({'Start': [8, 5, 8, 60], 'End': [10, 90, 13, 75], 'Info': ['some_info0','some_info1','some_info2','some_info3']})

B[["Start","End","Info"]]
Out[38]:
Start   End Info
0   8   10  some_info0
1   5   90  some_info1
2   8   13  some_info2
3   60  75  some_info3

我想根据A的间隔(开始-结束)与B的间隔重叠,向dataframe A添加列信息。如果A间隔与多个B间隔重叠,则应添加与较短间隔相对应的信息。在

我一直在研究如何管理这个问题,我发现了类似的问题,但他们的大多数答案都是使用iterrows()在我的情况下,因为我正在处理巨大的数据帧是不可行的。在

我想要点像:

^{pr2}$

然后删除副本,以保持信息来自较短的时间间隔。在

输出应该如下所示:

In [39]:
C = pd.DataFrame({'Start': [10, 11, 20, 62, 198], 'End': [11, 11, 35, 70, 200], 'Info': ['some_info0','some_info2','some_info1','some_info3',np.nan]})

C[["Start","End","Info"]]
Out[39]:
Start   End Info
0   10  11  some_info0
1   11  11  some_info2
2   20  35  some_info1
3   62  70  some_info3
4   198 200 NaN

我发现this question非常有趣,因为它暗示了使用pandas Interval对象解决这个问题的可能性。但经过多次尝试,我还是没能解决这个问题。在

有什么想法吗?在


Tags: 数据ininfo信息dataframe间隔someout
1条回答
网友
1楼 · 发布于 2024-09-27 02:27:40

我建议先执行一个函数,然后应用于行:

首先,我计算B中的delta(End-Start),用于排序

B['delta'] = B.End - B.Start

然后是一个获取信息的函数:

^{pr2}$

然后可以将此函数应用于A

A['info'] = A.apply(lambda x : get_info(x), axis='columns')


print(A)
   Start  End        info
0     10   11  some_info0
1     11   11  some_info2
2     20   35  some_info1
3     62   70  some_info3
4    198  200        None

注:

  • 不要使用pd.Interval,而是创建自己的条件。cx是您的间隔定义,请更改它们以获得准确的预期行为

相关问题 更多 >

    热门问题