python 如何将列值(除一个值外的所有值)连接到列表中,并将其添加为具有极性的列?

j8yoct9x  于 2023-09-29  发布在  Python
关注(0)|答案(1)|浏览(92)

我的输入格式如下:

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)
print(df)

shape: (3, 6)
┌────────┬───────┬───────┬───────┬───────┬───────┐
│ Name   ┆ val_1 ┆ val_2 ┆ val_3 ┆ val_4 ┆ val_5 │
│ ---    ┆ ---   ┆ ---   ┆ ---   ┆ ---   ┆ ---   │
│ str    ┆ str   ┆ str   ┆ str   ┆ str   ┆ str   │
╞════════╪═══════╪═══════╪═══════╪═══════╪═══════╡
│ Name_A ┆ a     ┆ null  ┆ null  ┆ c     ┆ null  │
│ Name_B ┆ null  ┆ null  ┆ c     ┆ null  ┆ null  │
│ Name_C ┆ a     ┆ b     ┆ null  ┆ g     ┆ i     │
└────────┴───────┴───────┴───────┴───────┴───────┘

我希望输出为:

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"] │
└────────┴───────┴───────┴───────┴───────┴───────┴───────────────────┘

我想将除“名称”列以外的所有列合并为一个列表。我已经简化了这个问题的数据,但实际上我们有许多瓦尔_N格式的列,如果有一个通用代码,我就不必列出每个列名了。

vfh0ocws

vfh0ocws1#

对于问题中的主要答案你可以做

df.with_columns(combined = pl.concat_list(pl.exclude('Name')))

pl.exclude是如何得到所有列,但给定的。
为了在最终的列表中去掉nulls,0.19.4版本刚刚引入了list.drop_nulls

df.with_columns(combined = pl.concat_list(pl.exclude('Name')).list.drop_nulls())

相关问题