如何用Polars将除指定列外的列值合并为列表并新增列
解决方案
直接用Polars的向量化操作实现,无需逐个指定列名,代码如下:
import polars as pl data = {"Name": ['Name_A', 'Name_B','Name_C'], "val_1": ['a',None, 'a'],"val_2": [None,None, 'b'],"val_3": [None,'c', None],"val_4": ['c',None, 'g'],"val_5": [None,None, 'i']} df = pl.DataFrame(data) # 新增combined列,合并除Name外所有列的非空值为列表 result_df = df.with_columns( combined=pl.concat_list(pl.all().exclude("Name")).list.filter(pl.element().is_not_null()) ) print(result_df)
代码解释
pl.all().exclude("Name"):自动选中除Name外的所有列,不管有多少个val_N格式的列都能适配pl.concat_list(...):将每行的多列值合并为一个列表(包含空值).list.filter(pl.element().is_not_null()):过滤列表中的空值,只保留非空元素with_columns:将新生成的combined列添加到原DataFrame中
运行结果
shape: (3, 7) ┌────────┬───────┬───────┬───────┬───────┬───────┬───────────────────┐ │ Name ┆ val_1 ┆ val_2 ┆ val_3 ┆ val_4 ┆ val_5 ┆ combined │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ str ┆ str ┆ str ┆ str ┆ str ┆ list[str] │ ╞════════╪═══════╪═══════╪═══════╪═══════╪═══════╪═══════════════════╡ │ Name_A ┆ a ┆ null ┆ null ┆ c ┆ null ┆ ["a", "c"] │ │ Name_B ┆ null ┆ null ┆ c ┆ null ┆ null ┆ ["c"] │ │ Name_C ┆ a ┆ b ┆ null ┆ g ┆ i ┆ ["a", "b", "g", "i"] │ └────────┴───────┴───────┴───────┴───────┴───────┴───────────────────┘
内容的提问来源于stack exchange,提问作者Shankze
相关产品推荐
相关产品推荐

