我创建了一个小数据框,我想将0.5乘以前一行,依此类推。
在:

1
2
3
4

输出:
1
0.5
0.25
0.125

我试过下面的方法,但效果不好。它不是累积的,可以说是永久的。
x = pd.DataFrame([1, 2, 3, 4])
y = np.zeros(x.shape)

y[0] = 1
yd = pd.DataFrame(y)

k =  yd.shift(1) * 0.5

print (k)

知道吗?谢谢你
第二个更复杂的问题,基于以前的问题。
data['y'] = np.where((data['a']<50) & (data['b']>0), data['initial'], pd.Series(0.99, data['y'].index).cumprod() / 0.99)

我试过这个密码,但没用。如果前提为真,则调用“initial”,否则继续进行累积乘法。

最佳答案

使用numpy.power

np.power(.5, x - 1)

       0
0  1.000
1  0.500
2  0.250
3  0.125

或者作为@DSM pointed out(更直观地说)
.5 ** (x - 1)

       0
0  1.000
1  0.500
2  0.250
3  0.125

另一方面,如果你只需要严格的连续幂.5
.5 ** pd.Series(range(len(x)))

0    1.000
1    0.500
2    0.250
3    0.125
dtype: float64

另一个cumprod选项
pd.Series(.5, x.index).cumprod() / .5

0    1.000
1    0.500
2    0.250
3    0.125
dtype: float64

或者
pd.Series({**dict.fromkeys(range(4), .5), **{0: 1}}).cumprod()

0    1.000
1    0.500
2    0.250
3    0.125
dtype: float64

关于python - Python Pandas累积乘法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52319772/

10-16 10:21