Polars - 使用另一个 DataFrame 的行过滤 DataFrame

问题描述 投票:0回答:1

我有两个数据框 -

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],
    },
)
python dataframe python-polars
1个回答
0
投票

您可以对 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()
      )
© www.soinside.com 2019 - 2024. All rights reserved.