我创建了一个小数据框,我想将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”,否则进行累积乘法。
答案 0 :(得分:4)
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