我创建了一个小数据框,我想将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”,否则继续进行累积乘法。
最佳答案
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/