gpt4 book ai didi

python - Polars - 根据另一列为每一行连接可变数量的列

转载 作者:行者123 更新时间:2023-12-05 05:30:07 36 4
gpt4 key购买 nike

假设我有一个由以下代码手动生成的简单数据框:

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'))
)

生成如下表格:

<表类="s-表"><头>一个bc要连接的列<正文>def一个,bdefb,cdef一个,c

我将如何按照“要连接的列”列中的描述连接所有列以产生如下结果:

<表类="s-表"><头>一个bc要连接的列连接的列字符串<正文>def一个,b去defb,c效果def一个,cdf

我试过这样做:

(df.with_columns(
pl.concat_str(pl.col('Columns to Concatenate').str.split(','))
.alias('Concatenated Column String'))
)

我很确定这不是正确的做法,并且会返回一个

ComputeError: Cannot cast list type

希望获得一些关于如何以惯用且快速的方式执行此操作而不必求助于行式 lambda 函数的指示。

最佳答案

这使用列表理解:

import polars as pl

df = pl.DataFrame({ 'a': ['d', 'd', 'd'],
'b': ['e', 'e', 'e'],
'c': ['f', 'f', 'f'],
'Columns to Concatenate': ['a,b', 'b,c', 'a,b,c']})



vals = ["".join([df.get_column(col)[i] for col in col_list]) for i, col_list in enumerate(df.get_column('Columns to Concatenate').str.split(','))]
df = df.hstack([pl.Series('Concatenated Column String', vals)])
print(df)

输出:

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,b,c ┆ def │
└─────┴─────┴─────┴────────────────────────┴────────────────────────────┘

备注:

这是相同的东西,但作为单行:

df = df.hstack([pl.Series('Concatenated Column String', ["".join([df.get_column(col)[i] for col in col_list]) for i, col_list in enumerate(df.get_column('Columns to Concatenate').str.split(','))])])

关于python - Polars - 根据另一列为每一行连接可变数量的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74780227/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com