python : several cumprods per column

标签 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' object has no attribute 'shift'。

df["column"] = df["column"].apply(lambda x: x*x.shift(1))

此外:此命令仅返回零并将整个列视为一个产品,因此似乎不适合我的问题:

df["column"] = df["column"].cumprod()

最佳答案

让我们使用 groupbycumsum 来识别要应用 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/

相关文章:

python - Tornado 请求.body

python - 在 Python 中对关联数组进行排序

python - scipy.optimize.curve_fit : not a proper array of floats error/object too deep for desired array

Python 读取 csv - BOM 嵌入到第一个键中

r - 从数据框列表中按顺序提取每一列

python - 根据条件转换 Pandas 数据框列

python - 用户警告 : Calling close() on already closed file. 警告 ("Calling close() on already closed file.")

python - 使用 pandas 创建特定过滤器

javascript - Function.apply 与 Function.prototype.apply

R将函数应用于两个向量的连续值