python:每列有几个cumprods

时间:2018-01-30 14:29:51

标签: python pandas apply

我有以下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()

1 个答案:

答案 0 :(得分:4)

cumsumcumprod一起使用来识别要应用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)