我有两个数据框 -
graph
和 search
具有相同的架构
Schema for graph:
SCHEMA = {
START_RANGE: pl.Int64,
END_RANGE: pl.Int64,
}
Schema for search:
SCHEMA = {
START: pl.Int64,
END: pl.Int64,
}
我想搜索图形数据框。 对于搜索数据框中的每一行,我想找到图形数据框中的所有行,其中
START_RANGE
和 END_RANGE
值严格在 search
数据框的范围内。
如何仅使用极坐标来实现此目的?
示例-
graph = pl.DataFrame(
{
"START_RANGE": [1, 10, 20, 30],
"END_RANGE": [5, 15, 25, 35],
},
)
search = pl.DataFrame(
{
"START": [2, 6, 7],
"END": [5, 9, 12],
},
)
# Expected output
[2,5] in range [1,5]
[6,9] in range [10,15]
[7,12] is not in any range
output = pl.DataFrame(
{
"START_RANGE": [1, 10],
"END_RANGE": [5, 15],
},
)
您可以对 START_RANGE 或 END_RANGE 为
join
START/END 的 filter
行执行交叉 between
操作。可选 drop
如果可以匹配多个范围,则中间列和潜在的重复项:
out = (graph.join(search, how='cross')
.filter(pl.col('START_RANGE').is_between(pl.col('START'), pl.col('END'))
|pl.col('END_RANGE').is_between(pl.col('START'), pl.col('END'))
)
.drop(['START', 'END'])
.unique()
)