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

如何在Polars中根据指定列动态拼接对应列的内容

问题解决:Polars动态拼接指定列的值

错误原因

你之前的代码报错是因为pl.col('Columns to Concatenate').str.split(',')返回的是列名字符串的列表,而pl.concat_str需要接收Polars列对象(Series)作为输入,两者类型不匹配,导致无法转换报错。

高效解法(Polars风格,无行级lambda)

利用Polars支持动态列选择的特性,直接通过表达式选取每行指定的列,再拼接值:

import polars as pl

cols=['a','b','c']
values=['d','e','f']
df=(pl.DataFrame({cols[i]:[values[i]]*3 for i in range(len(cols))})
    .with_columns(pl.lit(pl.Series(['a,b','b,c','a,c']))
                  .alias('Columns to Concatenate'))
   )

# 正确实现代码
result_df = df.with_columns(
    pl.concat_str(pl.col(pl.col('Columns to Concatenate').str.split(','))).alias('Concatenated Column String')
)

print(result_df)

代码解释

  1. pl.col('Columns to Concatenate').str.split(','):将每行的列名字符串拆分为列名列表(如第一行得到['a', 'b'])
  2. pl.col(...):将上述列名列表作为动态选择器,提取对应列的Series
  3. pl.concat_str:将选中列的字符串值按行拼接,生成目标列

执行后输出结果:

shape: (3, 5)
┌─────┬─────┬─────┬──────────────────────┬──────────────────────────┐
│ a   ┆ b   ┆ c   ┆ Columns to Concatenate ┆ Concatenated Column String │
│ --- ┆ --- ┆ --- ┆ ---                  ┆ ---                      │
│ str ┆ str ┆ str ┆ str                  ┆ str                      │
╞═════╪═════╪═════╪══════════════════════╪══════════════════════════╡
│ d   ┆ e   ┆ f   ┆ a,b                  ┆ de                       │
│ d   ┆ e   ┆ f   ┆ b,c                  ┆ ef                       │
│ d   ┆ e   ┆ f   ┆ a,c                  ┆ df                       │
└─────┴─────┴─────┴──────────────────────┴──────────────────────────┘

备选方案(基于struct打包)

如果需要更灵活的字段提取,也可以先将所有列打包为struct,再按列名列表取值拼接:

result_df = df.with_columns(
    pl.concat_str(
        pl.struct(pl.exclude('Columns to Concatenate')).row(pl.col('Columns to Concatenate').str.split(','))
    ).alias('Concatenated Column String')
)

这种方法通过pl.struct打包目标列,再用row()方法按列名列表提取对应字段值,最后完成拼接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:35:28