我有以下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'对象没有属性' shift'。
df["column"] = df["column"].apply(lambda x: x*x.shift(1))
另外:此命令仅返回零并将整个列视为一个产品,因此似乎不适合我的问题:
df["column"] = df["column"].cumprod()
答案 0 :(得分:4)
让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
输出:
1 + np.exp(-100)