连接
类似于其他数据框架库,Polars 支持一系列连接操作。
- 在单个或多个列上进行连接
- 左连接
- 内连接
- 外连接
数据集
import polars as pl
df_a = pl.DataFrame({"a": [1, 2, 1, 1], "b": ["a", "b", "c", "c"], "c": [0, 1, 2, 3]})
df_b = pl.DataFrame({"foo": [1, 1, 1], "bar": ["a", "c", "c"], "ham": ["let", "var", "const"]})
print(df_a)
shape: (4, 3)
┌─────┬─────┬─────┐
│ a ┆ b ┆ c │
│ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ i64 │
╞═════╪═════╪═════╡
│ 1 ┆ a ┆ 0 │
│ 2 ┆ b ┆ 1 │
│ 1 ┆ c ┆ 2 │
│ 1 ┆ c ┆ 3 │
└─────┴─────┴─────┘
print(df_b)
shape: (3, 3)
┌─────┬─────┬───────┐
│ foo ┆ bar ┆ ham │
│ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ str │
╞═════╪═════╪═══════╡
│ 1 ┆ a ┆ let │
│ 1 ┆ c ┆ var │
│ 1 ┆ c ┆ const │
└─────┴─────┴───────┘
急性
out = df_a.join(df_b, left_on=["a", "b"], right_on=["foo", "bar"], how="left")
print(out)
shape: (6, 4)
┌─────┬─────┬─────┬───────┐
│ a ┆ b ┆ c ┆ ham │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ i64 ┆ str │
╞═════╪═════╪═════╪═══════╡
│ 1 ┆ a ┆ 0 ┆ let │
│ 2 ┆ b ┆ 1 ┆ null │
│ 1 ┆ c ┆ 2 ┆ var │
│ 1 ┆ c ┆ 2 ┆ const │
│ 1 ┆ c ┆ 3 ┆ var │
│ 1 ┆ c ┆ 3 ┆ const │
└─────┴─────┴─────┴───────┘
惰性
q = df_a.lazy().join(df_b.lazy(), left_on="a", right_on="foo", how="outer")
out = q.collect()
print(out)
shape: (10, 5)
┌─────┬─────┬─────┬──────┬───────┐
│ a ┆ b ┆ c ┆ bar ┆ ham │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ i64 ┆ str ┆ str │
╞═════╪═════╪═════╪══════╪═══════╡
│ 1 ┆ a ┆ 0 ┆ a ┆ let │
│ 1 ┆ a ┆ 0 ┆ c ┆ var │
│ 1 ┆ a ┆ 0 ┆ c ┆ const │
│ 2 ┆ b ┆ 1 ┆ null ┆ null │
│ … ┆ … ┆ … ┆ … ┆ … │
│ 1 ┆ c ┆ 2 ┆ c ┆ const │
│ 1 ┆ c ┆ 3 ┆ a ┆ let │
│ 1 ┆ c ┆ 3 ┆ c ┆ var │
│ 1 ┆ c ┆ 3 ┆ c ┆ const │
└─────┴─────┴─────┴──────┴───────┘