I have the input in this format:
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 β
ββββββββββ΄ββββββββ΄ββββββββ΄ββββββββ΄ββββββββ΄ββββββββ
I want the output as:
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"] β
ββββββββββ΄ββββββββ΄ββββββββ΄ββββββββ΄ββββββββ΄ββββββββ΄ββββββββββββββββββββ
I want to combine all the columns as a list except the Name column. I have simplified the data for this question but in reality we have many columns of the val_N format and a generic code where I do not have to list each column name would be great.
>Solution :
For the main answer in the question you can do
df.with_columns(combined = pl.concat_list(pl.exclude('Name')))
pl.exclude is how to get all columns BUT the ones given.
To get rid of the nulls in the final list, version 0.19.4 just introduced list.drop_nulls.
df.with_columns(combined = pl.concat_list(pl.exclude('Name')).list.drop_nulls())