python-polars - 如何动态创建字段

标签 python-polars

有什么方法可以动态创建字段吗?我知道有一些方法。但最好了解极地的最佳方法。例如,我想向现有数据帧添加 12 个移位列。(lag1, lag2, lag3...lagN) 如何实现这一点?

谢谢。

最佳答案

您可以使用 python 语言来实现这一点。 Polars 表达式是延迟求值的,因此您可以在任何地方创建它们,在 for 循环、函数、列表理解中等等。

下面我给出了一个动态创建lag列的示例,其中一个方法是调用函数,分配给变量,然后使用该变量。并且具有列表理解能力。

# some initial dataframe
df = pl.DataFrame({
    "a": [1, 2, 3, 4, 5],
    "b": [5, 4, 3, 2, 1]
})

# a function that returns a lazy evaluated expression
def lag(name: str, n: int) -> pl.Expr:
    return pl.col(name).shift(n).suffix(f"_lag_{n}")

# a lazy evaluated expression assigned to a variable
lag_foo = lag("a", 1)

out = df.select([
    lag_foo,
] + [lag("b", i) for i in range(5)]  # create exprs with a list comprehension
)

print(out)

输出:

shape: (5, 6)
┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
│ a_lag_1 ┆ b_lag_0 ┆ b_lag_1 ┆ b_lag_2 ┆ b_lag_3 ┆ b_lag_4 │
│ ---     ┆ ---     ┆ ---     ┆ ---     ┆ ---     ┆ ---     │
│ i64     ┆ i64     ┆ i64     ┆ i64     ┆ i64     ┆ i64     │
╞═════════╪═════════╪═════════╪═════════╪═════════╪═════════╡
│ null    ┆ 5       ┆ null    ┆ null    ┆ null    ┆ null    │
├╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤
│ 1       ┆ 4       ┆ 5       ┆ null    ┆ null    ┆ null    │
├╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤
│ 2       ┆ 3       ┆ 4       ┆ 5       ┆ null    ┆ null    │
├╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤
│ 3       ┆ 2       ┆ 3       ┆ 4       ┆ 5       ┆ null    │
├╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤
│ 4       ┆ 1       ┆ 2       ┆ 3       ┆ 4       ┆ 5       │
└─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘

关于python-polars - 如何动态创建字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69954438/

相关文章:

python - Polars - 用其他列的值替换列中的部分字符串

python - 极地 : Nesting `over` calls

csv - Polars 列表类型为逗号分隔字符串

python-polars - Pandas `.isna()` 方法的 Polars 等价物是什么?

python-polars - 在滚动窗口上使用分组 z 分数

csv - 使用索引选择是 Polars : How to parse and transform (select/filter? 中的反模式)似乎需要这样的 CSV?

python - 如何展平/分割数组元组并计算 Polars 数据框中的列平均值?

python-polars - 枚举每个组