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

如何将Polars数据框指定列横向合并为单个列表列?

使用Python Polars将多列合并为列表列的高效方法

我正尝试使用Python Polars将多列合并为一列,但尚未找到一种优雅的方法将列合并为列表。我仅需将b至e列合并为一列,a列需保持原有状态。我曾尝试使用map_elements来实现此功能,但该方法不仅无效,运行速度还很慢,显然并非最佳方案。

现有数据框:

df = pl.from_repr("""
┌─────┬─────┬─────┬─────┬─────┐
│ a   ┆ b   ┆ c   ┆ d   ┆ e   │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ f64 ┆ f64 ┆ f64 ┆ f64 ┆ f64 │
╞═════╪═════╪═════╪═════╪═════╡
│ 0.1 ┆ 1.1 ┆ 2.1 ┆ 3.1 ┆ 4.1 │
│ 0.2 ┆ 1.2 ┆ 2.2 ┆ 3.2 ┆ 4.2 │
│ 0.3 ┆ 1.3 ┆ 2.3 ┆ 3.3 ┆ 4.3 │
└─────┴─────┴─────┴─────┴─────┘
""")

期望结果:

shape: (3, 2)
┌─────┬──────────────────────┐
│ a   ┆ value                │
│ --- ┆ ---                  │
│ f64 ┆ list[f64]            │
╞═════╪══════════════════════╡
│ 0.1 ┆ [1.1, 2.1, 3.1, 4.1] │
│ 0.2 ┆ [1.2, 2.2, 3.2, 4.2] │
│ 0.3 ┆ [1.3, 2.3, 3.3, 4.3] │
└─────┴──────────────────────┘

高效实现方法

不需要使用map_elements,Polars提供了矢量化的pl.concat_list函数,能直接将指定列合并为列表列,性能远优于逐行处理的方法。

代码示例:

result_df = df.select(
    'a',
    pl.concat_list(pl.col('b')..pl.col('e')).alias('value')
)

print(result_df)

说明:

  • pl.col('b')..pl.col('e') 选中从b到e的连续列,也可以直接指定列名列表:pl.col(['b', 'c', 'd', 'e'])
  • pl.concat_list() 将选中的列按行合并为列表类型的列
  • alias('value') 为新生成的列表列设置名称

运行上述代码即可得到期望结果,该方法基于Polars的矢量化引擎实现,处理大规模数据集时的效率会比map_elements高几个数量级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:17:15