如何用python中的pandas合并在R中复制foverlaps的相同输出?

2024-06-16 12:54:41 发布

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

我正在使用foverlaps函数在R中合并表。但是我需要使用python重现相同的输出。我搜索了一下,在pandas库上找到了merge函数。但是即使使用这个函数,我也不能复制相同的输出。在

首先,R中的输出:

这是第一张表格(间隔):

   V1 V2 intid
1:  1  5     1
2:  4  9     2
3:  6 12     3
4: 11 17     4
5: 18 20     5

这是第二个表(decomp):

^{pr2}$

R中进行合并的代码:

relations <- foverlaps(decomp, intervals, type='within', nomatch=0)

输出(关系):

    V1 V2 intid i.V1 i.V2 subid
 1:  1  5     1    1    4     A
 2:  1  5     1    4    5     B
 3:  4  9     2    4    5     B
 4:  4  9     2    5    6     C
 5:  4  9     2    6    9     D
 6:  6 12     3    6    9     D
 7:  6 12     3    9   11     E
 8:  6 12     3   11   12     F
 9: 11 17     4   11   12     F
10: 11 17     4   12   17     G
11: 18 20     5   18   20     I

现在我在python中的输出:

这是第一个表(df_of_pairs):

   V1  V2  intid
0   1   5      1
1   4   9      2
2   6  12      3
3  11  17      4
4  18  20      5

这是第二个表(相邻的df_):

   V1  V2 subid
0   1   4     A
1   4   5     B
2   5   6     C
3   6   9     D
4   9  11     E
5  11  12     F
6  12  17     G
7  17  18     H
8  18  20     I

现在的问题是,我在使用pandas merge时没有在python中复制相同的输出。我尝试了几种方法,但都没有成功,以下是我使用的方法之一:

df = df_of_pairs.merge(df_of_adjacent, left_on=['V1'], right_on=['V2'] )

输出(df):

   V1_x  V2_x  intid  V1_y  V2_y subid
0     4     9      2     1     4     A
1     6    12      3     5     6     C
2    11    17      4     9    11     E
3    18    20      5    17    18     H

{但是在这个例子中,它和a3的列很相似。在


Tags: of方法函数pandasdfonmerge表格
1条回答
网友
1楼 · 发布于 2024-06-16 12:54:41

我不能很容易地得到您想要的精确输出,但是这里有一个使用IntervalIndex的部分解决方案。在

s1 = pd.IntervalIndex.from_arrays(df1['V1'], df1['V2'])  # default: closed='right'
s2 = pd.IntervalIndex.from_arrays(df2['V1'], df2['V2'])
df_of_adjacent.set_index(s2, inplace=True)
df_of_adjacent.loc[s1]
          V1  V2 subid
(1, 4]     1   4     A
(4, 5]     4   5     B
(4, 5]     4   5     B
(5, 6]     5   6     C
(6, 9]     6   9     D
(6, 9]     6   9     D
(9, 11]    9  11     E
(11, 12]  11  12     F
(11, 12]  11  12     F
(12, 17]  12  17     G
(18, 20]  18  20     I

相关问题 更多 >