ZetCode

Polars Join 函数

最后修改时间:2025年3月1日

Polars 是一个用于数据操作的 Python 快速 DataFrame 库。Join 函数根据共同的键合并两个 DataFrame 中的行。本教程将通过实际示例介绍如何在 Polars 中使用 Join 函数。

Join 在合并数据集方面至关重要,例如将客户数据与交易数据合并。Polars 支持多种 Join 类型,包括内连接 (inner)、左连接 (left)、右连接 (right) 和外连接 (outer)。

内连接

此示例展示了如何在两个 DataFrame 之间执行内连接。

inner_join.py
import polars as pl

df1 = pl.DataFrame({
    'id': [1, 2, 3],
    'name': ['Alice', 'Bob', 'Charlie']
})

df2 = pl.DataFrame({
    'id': [2, 3, 4],
    'age': [25, 30, 35]
})

result = df1.join(df2, on='id', how='inner')
print(result)

join(how='inner') 将两个 DataFrame 中 'id' 列匹配的行组合起来。结果中只包含匹配的行。

左连接

此示例演示了左连接,它包含左侧 DataFrame 中的所有行。

left_join.py
import polars as pl

df1 = pl.DataFrame({
    'id': [1, 2, 3],
    'name': ['Alice', 'Bob', 'Charlie']
})

df2 = pl.DataFrame({
    'id': [2, 3, 4],
    'age': [25, 30, 35]
})

result = df1.join(df2, on='id', how='left')
print(result)

join(how='left') 包含 df1 中的所有行以及 df2 中的匹配行。df2 中不匹配的行将填充为 null 值。

右连接

此示例展示了如何执行右连接,它包含右侧 DataFrame 中的所有行。

right_join.py
import polars as pl

df1 = pl.DataFrame({
    'id': [1, 2, 3],
    'name': ['Alice', 'Bob', 'Charlie']
})

df2 = pl.DataFrame({
    'id': [2, 3, 4],
    'age': [25, 30, 35]
})

result = df1.join(df2, on='id', how='right')
print(result)

join(how='right') 包含 df2 中的所有行以及 df1 中的匹配行。df1 中不匹配的行将填充为 null 值。

外连接

此示例演示了外连接,它包含两个 DataFrame 中的所有行。

outer_join.py
import polars as pl

df1 = pl.DataFrame({
    'id': [1, 2, 3],
    'name': ['Alice', 'Bob', 'Charlie']
})

df2 = pl.DataFrame({
    'id': [2, 3, 4],
    'age': [25, 30, 35]
})

result = df1.join(df2, on='id', how='outer')
print(result)

join(how='outer') 包含两个 DataFrame 中的所有行。不匹配的行将填充为 null 值。

多列 Join

此示例展示了如何基于多列 Join DataFrame。

multi_column_join.py
import polars as pl

df1 = pl.DataFrame({
    'id': [1, 2, 3],
    'name': ['Alice', 'Bob', 'Charlie'],
    'dept': ['HR', 'IT', 'Finance']
})

df2 = pl.DataFrame({
    'id': [2, 3, 4],
    'name': ['Bob', 'Charlie', 'David'],
    'dept': ['IT', 'Finance', 'HR']
})

result = df1.join(df2, on=['id', 'name'], how='inner')
print(result)

join(on=['id', 'name']) 将 'id' 和 'name' 列都匹配的行组合起来。这对于更复杂的 Join 非常有用。

自连接

此示例演示了自连接,即一个 DataFrame 与其自身进行连接。

self_join.py
import polars as pl

df = pl.DataFrame({
    'id': [1, 2, 3],
    'manager_id': [None, 1, 2]
})

result = df.join(df, left_on='manager_id', right_on='id', how='left')
print(result)

join(left_on='manager_id', right_on='id') 将 DataFrame 与其自身连接,以查找每个员工的经理姓名。这对于层级数据非常有用。

交叉连接

此示例展示了如何执行交叉连接,它将两个 DataFrame 的所有行进行组合。

cross_join.py
import polars as pl

df1 = pl.DataFrame({
    'color': ['Red', 'Blue']
})

df2 = pl.DataFrame({
    'size': ['S', 'M', 'L']
})

result = df1.join(df2, how='cross')
print(result)

join(how='cross') 会创建两个 DataFrame 的笛卡尔积。这对于生成组合非常有用。

Join 的最佳实践

来源

Polars 文档

在本文中,我们探讨了如何在 Polars 中使用 Join 函数。

作者

我的名字是 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。至今,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有超过十年的经验。

所有 Polars 教程列表。