我想要执行以下操作:
输入:
df = pl.DataFrame({
"a": [1,15,None,20,None]
})
输出:
df = pl.DataFrame({
"a": [1,15,None,20,None],
"b": [0,14,None,5,None]
})
也就是说,来自:
一个 |
---|
1 |
15 |
没有任何 |
20 |
没有任何 |
到:
一个 | 乙 |
---|---|
1 | 0 |
15 | 14 |
没有任何 | 没有任何 |
20 | 5 |
没有任何 | 没有任何 |
那么,它的作用是:
- 如果“A”的值为空,则 B(输出列)的值也为空
- 如果“A”有某个值,请检索“A”中的最后一个非空值,然后用前一个非空值减去“A”中的当前值
我想在 python 的 polars dataframe 库中执行此操作,但似乎找不到解决方案。
我尝试过以下问题:
如何在 Polars 中从一列中选择最后一个非空值并从同一行的另一列中选择值?
但不幸的是,这并不能回答原始问题,因为问题对整个列进行聚合,然后取该列的最后一个值。
我想要做的不是聚合整个列,而是简单地用先前的非空值减去当前值。
我也尝试过使用滚动:
df = df.with_row_index().rolling(
index_column = 'index',
period = '???i').agg(pl.col("A").last())
但是,当然,这是行不通的,因为无法确定空值的出现(即它不是周期性的,所以我不知道当前条目之前有多少个索引在“A”中包含非空值)。
有人知道怎么做吗?
谢谢!
shift
您可以使用和的组合forward_fill
来获取最后一个非空值。因此,根据你的输入,这看起来像