如何通过 python 中的 pandas 合并重现 R 中 foverlaps 的相同输出?
Posted
技术标签:
【中文标题】如何通过 python 中的 pandas 合并重现 R 中 foverlaps 的相同输出?【英文标题】:How to reproduce the same output of foverlaps in R with merge of pandas in python? 【发布时间】:2018-04-17 20:06:05 【问题描述】:我正在使用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):
V1 V2 subid
1: 1 4 A
2: 4 5 B
3: 5 6 C
4: 6 9 D
5: 9 11 E
6: 11 12 F
7: 12 17 G
8: 17 18 H
9: 18 20 I
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_of_adjacent):
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 合并时,我没有在 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
这个问题与R foverlaps equivalent in Python 非常相似,但在这种情况下它有不同的列。
【问题讨论】:
【参考方案1】:我无法轻松获得您想要的确切输出,但这是使用 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
【讨论】:
感谢您的帮助!我会尝试使用这个功能。您知道可能解决此问题的其他功能吗?也许是 python 的另一个库? 你好@peter,我无法得到与你相同的输出!我的结果与原始数据框相同!会发生什么? @PabloPavan,我不知道有任何其他 python 包复制 R 的foverlaps
的结果,但这两个线程看起来很相关:***.com/questions/40247095/…***.com/questions/30627968/… 至于你为什么获得与原始 DataFrame 相同的结果,您必须缺少 inplace=True
或者没有在我的答案中保存第三行的结果。以上是关于如何通过 python 中的 pandas 合并重现 R 中 foverlaps 的相同输出?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过在 Python 中将两个列表合并为一个,使用 CSV 模块或 Pandas 写入 csv 或 Excel 文件?
如何使用 Python Pandas 合并多个 CSV 文件
求助,使用Python合并多个EXCEL表格时,如果表格有密码,密码已知,该怎么通过pandas合并,