gpt4 book ai didi

dataframe - 如何使用 cumfold 或 cumreduce 创建有状态列

转载 作者:行者123 更新时间:2023-12-01 22:51:27 25 4
gpt4 key购买 nike

我正在尝试创建一个列,它会为目标列中的每个 1/True 更改其值,并为 0/False 保留先前的值。因此,例如如何从中获得

a = pl.DataFrame({'a': [1, 0, 0, 0, 1, 0, 0, 1]})
print(a)
┌─────┐
│ a │
│ --- │
│ i64 │
╞═════╡
│ 1 │
├╌╌╌╌╌┤
│ 0 │
├╌╌╌╌╌┤
│ 0 │
├╌╌╌╌╌┤
│ 0 │
├╌╌╌╌╌┤
│ 1 │
├╌╌╌╌╌┤
│ 0 │
├╌╌╌╌╌┤
│ 0 │
├╌╌╌╌╌┤
│ 1 │
├╌╌╌╌╌┤
│ 1 │
└─────┘

这个数据框

┌─────┬────────────┐
│ a ┆ b │
│ --- ┆ --- │
│ i64 ┆ str │
╞═════╪════════════╡
│ 1 ┆ new_value1 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 0 ┆ new_value1 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 0 ┆ new_value1 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 0 ┆ new_value1 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 1 ┆ new_value2 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 0 ┆ new_value2 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 0 ┆ new_value2 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 1 ┆ new_value3 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 1 ┆ new_value4 │
└─────┴────────────┘

PS:添加一些文本,这样帖子就不是代码了。

最佳答案

在 polars 中,foldreducecumfoldcumreduce 是水平表达式。这意味着它们操作的是操作列,而不是元素。

要实现您想要的效果,您可以使用 cumsum 在每个 True 值上获得一个单调递增的整数。

然后我们将该结果与format 表达式结合起来以获得您想要的字符串输出。

a.with_column(
pl.format("new_value_{}", pl.col("a").cumsum())
)
shape: (8, 2)
┌─────┬─────────────┐
│ a ┆ literal │
│ --- ┆ --- │
│ i64 ┆ str │
╞═════╪═════════════╡
│ 1 ┆ new_value_1 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 0 ┆ new_value_1 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 0 ┆ new_value_1 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 0 ┆ new_value_1 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 1 ┆ new_value_2 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 0 ┆ new_value_2 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 0 ┆ new_value_2 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 1 ┆ new_value_3 │
└─────┴─────────────┘

关于dataframe - 如何使用 cumfold 或 cumreduce 创建有状态列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74271811/

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