首页 > 解决方案 > 带有 IF 情况的 Python Pandas 累积乘法

问题描述

我创建了一个小数据框,我想将 0.99 乘以前一行,依此类推,但前提是“IF case”为真,否则将 x[i].

在:

 1
 6
 2
 8
 4

出去:

    1.00
    0.99
    2.00
    1.98
    1.96

在一个人的帮助下,基于类似的问题,我尝试了以下但不起作用。

x = pd.DataFrame([1, 6, 2, 8, 4])
y = np.zeros(x.shape)

yd = pd.DataFrame(y)
yd = np.where(x<3, x ,pd.Series(.99, yd.index).cumprod() / .99)

任何想法?谢谢

标签: pythonpandasdataframe

解决方案


这更像是一个groupby问题,当值小于 3 时,您重置 prod 进程

y=x[0]
mask=y<3
y.where(mask,0.99).groupby(mask.cumsum()).cumprod()
Out[122]: 
0    1.0000
1    0.9900
2    2.0000
3    1.9800
4    1.9602
Name: 0, dtype: float64

至少我们这里有 for 循环(如果上面不起作用)

your=[]
for t,v in enumerate(x[0]):
    if v < 3:
        your.append(v)
    else:
        your.append(your[t-1]*0.99)
your
Out[129]: [1, 0.99, 2, 1.98, 1.9602]

推荐阅读