Python Pandas累积乘法

时间:2018-09-13 18:28:04

标签: python pandas dataframe

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

1 个答案:

答案 0 :(得分:4)

使用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