我有以下 df:
id column
1 NaN
1 1
1 1.05
1 1.10
1 NaN
1 NaN
1 3
1 1.08
1 1.07
1 NaN
我想在列上创建一个累积乘积。但是,只要 NaN 介于两者之间,产品就应该重新启动。结果应如下所示:
id column
1 NaN
1 1
1 1.05
1 1.155
1 NaN
1 NaN
1 3
1 3.24
1 3.4668
1 NaN
下面的代码看起来很理想,但它返回错误:AttributeError: 'float' object has no attribute 'shift'。
df["column"] = df["column"].apply(lambda x: x*x.shift(1))
此外:此命令仅返回零并将整个列视为一个产品,因此似乎不适合我的问题:
df["column"] = df["column"].cumprod()
最佳答案
让我们使用 groupby
和 cumsum
来识别要应用 cumprod
的组:
df.groupby(df.column.isnull().cumsum()).cumprod()
输出:
id column
0 1 NaN
1 1 1.0000
2 1 1.0500
3 1 1.1550
4 1 NaN
5 1 NaN
6 1 3.0000
7 1 3.2400
8 1 3.4668
9 1 NaN
关于 python : several cumprods per column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48523806/