You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未知匹配列名时如何合并(Join/Concat)Polars DataFrames

解决Polars中动态公共列的DataFrame合并问题

你的需求是合并两个有数量不固定公共列(内容完全匹配)的DataFrame,最终保留所有唯一列且公共列只出现一次,用join操作就能完美实现,具体步骤如下:

  1. 自动识别公共列:通过列名集合的交集获取两个DataFrame的公共列,无需硬编码列名,适配公共列数量变化的场景。
  2. 执行内连接:以公共列为连接键,由于公共列内容完全一致,内连接会精准对齐行,同时自动去重公共列,合并所有其他列。

完整代码示例

import polars as pl

data1 = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
}
df1 = pl.DataFrame(data1)

data2 = {
    'B': [4, 5, 6],
    'C': [7, 8, 9],
    'D': [1, 2, 3]
}
df2 = pl.DataFrame(data2)

# 获取两个DataFrame的公共列
common_cols = list(set(df1.columns) & set(df2.columns))

# 执行合并(内连接自动处理公共列去重与行对齐)
merged_df = df1.join(df2, on=common_cols)

print(merged_df)

输出结果

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

为什么不用concat?

如果直接用pl.concat([df1, df2], how="horizontal"),会直接拼接所有列,导致公共列(如B、C)重复出现,不符合你的需求。而join操作会利用公共列的匹配关系,自动完成行对齐和公共列去重,更贴合场景。

内容的提问来源于stack exchange,提问作者BhanuKiran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 12:35:27