如何使用极性.Concat_str组合由正则表达式选择的多列?



我有一个问题,合并成一个列。假设我有一个数据帧(df),如下所示:

>> print(df)
shape: (3, 4)
┌─────┬───────┬───────┬───────┐
│ a   ┆ b_a_1 ┆ b_a_2 ┆ b_a_3 │
│ --- ┆ ---   ┆ ---   ┆ ---   │
│ i64 ┆ str   ┆ str   ┆ str   │
╞═════╪═══════╪═══════╪═══════╡
│ 1   ┆ a--   ┆       ┆       │
├╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ 1   ┆       ┆ b--   ┆       │
├╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ 1   ┆       ┆       ┆ c--   │
└─────┴───────┴───────┴───────┘

并且我希望能够使用python极性将最后三(3)列合并为一个。我已经尝试并成功地得到了我想要的。然而,

>> out = df.select(pl.concat_str(['b_a_1', 'b_a_2', 'b_a_3']).alias('b_a'))
>> print(out)
shape: (3, 1)
┌─────┐
│ b_a │
│ --- │
│ str │
╞═════╡
│ a-- │
├╌╌╌╌╌┤
│ b-- │
├╌╌╌╌╌┤
│ c-- │
└─────┘

当我使用正则表达式选择列时,我没有得到上面的结果

>> out = df.select(pl.concat_str('^b_a_d$'))
>> print(out)
shape: (3, 3)
┌───────┬───────┬───────┐
│ b_a_1 ┆ b_a_2 ┆ b_a_3 │
│ ---   ┆ ---   ┆ ---   │
│ str   ┆ str   ┆ str   │
╞═══════╪═══════╪═══════╡
│ a--   ┆       ┆       │
├╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│       ┆ b--   ┆       │
├╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│       ┆       ┆ c--   │
└───────┴───────┴───────┘

运行

>> out = df.select(pl.concat_str('^b_a_*$'))
>> print(out)
shape: (0, 0)
┌┐
╞╡
└┘

我如何选择列与正则表达式和组合成一个?

非常感谢您的时间和建议。

真诚,这一个

由于polars.concat_str在将str与null连接时的当前行为是输出null,因此可能的解决方法是使用.fill_null,在相关列上用空字符串替换null。

(
df.select([
pl.concat_str(
pl.col("^b_a_d$").fill_null("").alias("b_a")
)
])
)
shape: (3, 1)
┌─────┐
│ b_a │
│ --- │
│ str │
╞═════╡
│ a-- │
├╌╌╌╌╌┤
│ b-- │
├╌╌╌╌╌┤
│ c-- │
└─────┘

最新更新