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

如何在Polars中合并字典内DataFrame并保留原表名称列

在Polars中实现类似R Tidyverse bind_rows(.id = "ID")的简洁合并方式

你可以通过列表推导式+with_columns添加表名列+pl.concat垂直合并的组合,实现和R中bind_rows(.id = "ID")几乎一样的简洁效果,不需要显式逐个处理DataFrame:

import polars as pl

dcty = {
    "df1": pl.DataFrame({'col1': [1, 2], 'col2': ["a", "b"]}),
    "df2": pl.DataFrame({'col1': [3, 4], 'col2': ["c", "d"]}),
}

# 核心实现
combined_df = pl.concat(
    [df.with_columns(sheet=pl.lit(sheet_name)) for sheet_name, df in dcty.items()],
    how="vertical"
)

print(combined_df)

执行后输出完全符合预期:

shape: (4, 3)
┌──────┬──────┬──────┐
│ col1 ┆ col2 ┆ sheet│
│ ---  ┆ ---  ┆ ---  │
│ i64  ┆ str  ┆ str  │
╞══════╪══════╪══════╡
│ 1    ┆ a    ┆ df1  │
│ 2    ┆ b    ┆ df1  │
│ 3    ┆ c    ┆ df2  │
│ 4    ┆ d    ┆ df2  │
└──────┴──────┴──────┘

补充说明

  • 该写法遍历字典的键值对,给每个DataFrame添加一个值为工作表名称的常量列(pl.lit用于创建常量值),再用pl.concat垂直合并所有处理后的DataFrame。
  • 如果字典中不同DataFrame的列结构不一致,pl.concat默认会自动对齐列,缺失的列会填充null,和R的bind_rows行为一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:48:19