鉴于代码

df1 = pl.DataFrame({"A": [1, 1], "B": [3, 4]})
df2 = pl.DataFrame({"A": [1, 1], "C": [5, 6]})
result = df1.join(df2, on='A')

result看起来像

shape: (4, 3)
┌─────┬─────┬─────┐
│ A   ┆ B   ┆ C   │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╡
│ 1   ┆ 3   ┆ 5   │
│ 1   ┆ 4   ┆ 5   │
│ 1   ┆ 3   ┆ 6   │
│ 1   ┆ 4   ┆ 6   │
└─────┴─────┴─────┘

但我希望它是

shape: (2, 3)
┌─────┬─────┬─────┐
│ A   ┆ B   ┆ C   │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╡
│ 1   ┆ 3   ┆ 5   │
│ 1   ┆ 4   ┆ 6   │
└─────┴─────┴─────┘

try 使用left_onright_onhow参数无法解决此问题.

推荐答案

如果表是对齐的(可能是在按on列排序之后),则可以使用pl.concat将它们水平连接在一起.

pl.concat([df1.sort("A"), df2.sort("A").drop("A")], how="horizontal")
shape: (2, 3)
┌─────┬─────┬─────┐
│ A   ┆ B   ┆ C   │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╡
│ 1   ┆ 3   ┆ 5   │
│ 1   ┆ 4   ┆ 6   │
└─────┴─────┴─────┘

如果一个表包含多行,而你想保留多余的行,你可以添加一个额外的列来存储所有具有相同on列的行中该行的索引.然后,您可以使用on列和索引连接表.

(
    df1
    .with_columns(pl.int_range(0, pl.len()).over("A").alias("id"))
    .join(
        df2.with_columns(pl.int_range(0, pl.len()).over("A").alias("id")),
        on=["A", "id"],
        how="left",
    )
    .select(pl.exclude("id"))
)

Python相关问答推荐

剧作家Python没有得到回应

大Pandas 胚胎中产生组合

如何访问所有文件,例如环境变量

Polars:用氨纶的其他部分替换氨纶的部分

如何将多进程池声明为变量并将其导入到另一个Python文件

Pre—Commit MyPy无法禁用非错误消息

将输入聚合到统一词典中

计算分布的标准差

lityter不让我输入左边的方括号,'

幂集,其中每个元素可以是正或负""""

python中csv. Dictreader. fieldname的类型是什么?'

OpenCV轮廓.很难找到给定图像的所需轮廓

处理Gekko的非最优解

如何在Gekko中处理跨矢量优化

在我融化极点数据帧之后,我如何在不添加索引的情况下将其旋转回其原始形式?

Django.core.exceptions.SynchronousOnlyOperation您不能从异步上下文中调用它-请使用线程或SYNC_TO_ASYNC

Regex用于匹配Python中逗号分隔的AWS区域

为什么Visual Studio Code说我的代码在使用Pandas concat函数后无法访问?

函数()参数';代码';必须是代码而不是字符串

有没有一种方法可以根据不同索引集的数组从2D数组的对称子矩阵高效地构造3D数组?