对于名称以pattern结尾的每一列,添加一个不带该pattern的相应列

问题描述 投票:0回答:1

我有以下数据框:

import polars as pl
import numpy as np
df = pl.DataFrame(
    {
        "nrs": [1, 2, 3, None, 5],
        "names_A0": ["foo", "ham", "spam", "egg", None],
        "random_A0": np.random.rand(5),
        "A_A2": [True, True, False, False, False],
    }
)
digit=0

对于名称以字符串

suf =f'_A{digit}'
结尾的每个列 X,我想向
df
添加一个相同的列,其名称与 X 相同,但没有
suf
。在此示例中,我需要将列
names
random
添加到原始数据框
df
,其内容分别与列
names_A0
random_A0
相同。

python calculated-columns python-polars
1个回答
0
投票

您可以使用 Polars 的 列选择器 选择相应的列,然后使用

.name.map
重命名选择器表达式的输出。

import polars.selectors as cs

df.with_columns(cs.matches("_A\d$").name.map(lambda name: name[:-3]))
shape: (5, 7)
┌──────┬──────────┬───────────┬───────┬───────┬──────────┬───────┐
│ nrs  ┆ names_A0 ┆ random_A0 ┆ A_A2  ┆ names ┆ random   ┆ A     │
│ ---  ┆ ---      ┆ ---       ┆ ---   ┆ ---   ┆ ---      ┆ ---   │
│ i64  ┆ str      ┆ f64       ┆ bool  ┆ str   ┆ f64      ┆ bool  │
╞══════╪══════════╪═══════════╪═══════╪═══════╪══════════╪═══════╡
│ 1    ┆ foo      ┆ 0.314699  ┆ true  ┆ foo   ┆ 0.314699 ┆ true  │
│ 2    ┆ ham      ┆ 0.594001  ┆ true  ┆ ham   ┆ 0.594001 ┆ true  │
│ 3    ┆ spam     ┆ 0.276783  ┆ false ┆ spam  ┆ 0.276783 ┆ false │
│ null ┆ egg      ┆ 0.869385  ┆ false ┆ egg   ┆ 0.869385 ┆ false │
│ 5    ┆ null     ┆ 0.955341  ┆ false ┆ null  ┆ 0.955341 ┆ false │
└──────┴──────────┴───────────┴───────┴───────┴──────────┴───────┘

注意。 在上面的示例中,我们可以选择名称包含

_A
后跟单个数字 (
\d
) 后跟字符串结尾 (
$
) 的所有列。由于后缀保证长度为 3,因此新名称等于原始名称,去掉最后 3 个字母。

© www.soinside.com 2019 - 2024. All rights reserved.