带有IF情况的Python Pandas累积乘法

时间:2018-09-13 20:12:19

标签: python pandas dataframe

我创建了一个小数据框,我想将0.99乘以上一行,依此类推,但前提是“ IF case”为true,否则将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)

有什么主意吗?谢谢

2 个答案:

答案 0 :(得分:4)

这更像是groupby问题,当值小于3时,您将重置生产过程

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]

答案 1 :(得分:0)

这将检查当前行中x的值是否小于3。如果是,则将其保持不变,否则将前一行乘以0.99。

x = pd.DataFrame([1, 6, 2, 8, 4])   
x['out'] = np.where(x[0] <3, x[0], x[0].shift(1)*0.99)

输出:

x['out']

0    1.00
1    0.99
2    2.00
3    1.98
4    7.92