Python Pandas 累积乘法

标签 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)

我尝试了这段代码,但不起作用。如果前提为真,则调用“初始”,否则继续进行累积乘法。

最佳答案

使用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 Pandas 累积乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52319772/

相关文章:

Python:将小时数添加到 Pandas 时间戳

python - 将 pandas 数据框列中的值替换为前一个值

python - 使用Python通过下拉菜单+按钮进行抓取

python - 来自 TimeGrouper 的组从第一个索引开始

python - 如何使用变量.format写入文件?

python - 创建一个以另一个 DataFrame 为条件的 Pandas DataFrame

python - 在 Pandas 中将一列列表扩展为多行

python - 如何在 jinja2 中循环 pandas 数据框的行和列?

python - 如何抑制 matplotlib 警告?

python - 对于纯 numpy 代码,使用 numba 的 yield 在哪里?