Pandas区间交叉

2024-09-30 22:21:13 发布

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

更新5:

此功能已作为熊猫20.1的一部分发布(在我生日当天:)

更新4:

公关已经合并!在

更新3:

The PR has moved here

更新2:

似乎这个问题可能导致了re-opening the PR for IntervalIndex in pandas。在

更新:

我不再有这个问题了,因为我现在实际上在查询来自A和{}的重叠范围,而不是来自{}的点,它们属于{}中的范围,这是一个完整的间隔树问题。我不会删除这个问题,因为我认为这仍然是一个有效的问题,我没有一个好的答案。在

问题陈述

我有两个数据帧。在

在dataframeA中,两个整数列一起表示一个间隔。在

在dataframeB中,一个整数列表示一个位置。在

我想做一种连接,这样就可以将点分配到它们所在的每个区间。在

间隔很少但偶尔会重叠。如果两个点都落在一个重叠点内,则应指定两个点。大约一半的点不会落在区间内,但几乎每个区间都至少有一个点在区间内。在

我一直在想什么

我最初打算从pandas中转储数据,并使用intervaltreebanyanbx-python,但后来我遇到了这个gist。原来shoyer在那里的ideas shoyer从来没有把它变成熊猫,但它让我思考——在熊猫身上实现这一点可能是可能的,因为我希望这段代码尽可能快地运行,所以我宁愿在最后一刻才将数据从pandas中转储出去。我也觉得这是可能的,bins和熊猫^{}功能,但我是熊猫的新手,所以我可以使用一些指导!谢谢!在

注释

可能有关联?Pandas DataFrame groupby overlapping intervals of variable length


Tags: the数据功能repandas间隔here整数
2条回答

此功能是作为熊猫20.1的一部分发布的

pyranges回答,这基本上是熊猫撒上了生物信息学的糖。在

设置:

import numpy as np
np.random.seed(0)
import pyranges as pr

a = pr.random(int(1e6))
# +       +     -+     -+       +
# | Chromosome   | Start     | End       | Strand       |
# | (category)   | (int32)   | (int32)   | (category)   |
# |       +     -+     -+       |
# | chr1         | 8830650   | 8830750   | +            |
# | chr1         | 9564361   | 9564461   | +            |
# | chr1         | 44977425  | 44977525  | +            |
# | chr1         | 239741543 | 239741643 | +            |
# | ...          | ...       | ...       | ...          |
# | chrY         | 29437476  | 29437576  | -            |
# | chrY         | 49995298  | 49995398  | -            |
# | chrY         | 50840129  | 50840229  | -            |
# | chrY         | 38069647  | 38069747  | -            |
# +       +     -+     -+       +
# Stranded PyRanges object has 1,000,000 rows and 4 columns from 25 chromosomes.
# For printing, the PyRanges was sorted on Chromosome and Strand.

b = pr.random(int(1e6), length=1)
# +       +     -+     -+       +
# | Chromosome   | Start     | End       | Strand       |
# | (category)   | (int32)   | (int32)   | (category)   |
# |       +     -+     -+       |
# | chr1         | 52110394  | 52110395  | +            |
# | chr1         | 122640219 | 122640220 | +            |
# | chr1         | 162690565 | 162690566 | +            |
# | chr1         | 117198743 | 117198744 | +            |
# | ...          | ...       | ...       | ...          |
# | chrY         | 45169886  | 45169887  | -            |
# | chrY         | 38863683  | 38863684  | -            |
# | chrY         | 28592193  | 28592194  | -            |
# | chrY         | 29441949  | 29441950  | -            |
# +       +     -+     -+       +
# Stranded PyRanges object has 1,000,000 rows and 4 columns from 25 chromosomes.
# For printing, the PyRanges was sorted on Chromosome and Strand.

执行:

^{pr2}$

相关问题 更多 >