python - 带有 IF 情况的 Python Pandas 累积乘法
问题描述
我创建了一个小数据框,我想将 0.99 乘以前一行,依此类推,但前提是“IF case”为真,否则将 x[i].
在:
1
6
2
8
4
出去:
1.00
0.99
2.00
1.98
1.96
在一个人的帮助下,基于类似的问题,我尝试了以下但不起作用。
x = pd.DataFrame([1, 6, 2, 8, 4])
y = np.zeros(x.shape)
yd = pd.DataFrame(y)
yd = np.where(x<3, x ,pd.Series(.99, yd.index).cumprod() / .99)
任何想法?谢谢
解决方案
这更像是一个groupby
问题,当值小于 3 时,您重置 prod 进程
y=x[0]
mask=y<3
y.where(mask,0.99).groupby(mask.cumsum()).cumprod()
Out[122]:
0 1.0000
1 0.9900
2 2.0000
3 1.9800
4 1.9602
Name: 0, dtype: float64
至少我们这里有 for 循环(如果上面不起作用)
your=[]
for t,v in enumerate(x[0]):
if v < 3:
your.append(v)
else:
your.append(your[t-1]*0.99)
your
Out[129]: [1, 0.99, 2, 1.98, 1.9602]
推荐阅读
- visual-c++ - MS Visual Studio 2019:如何在预处理后找到结构的实际定义?
- r - 如何在 R 中使用 cbindlist 的功能来合并存储在我的计算机中的多个 cvs 文件?
- python - 循环遍历列表的元素并作为值包含在字典中
- r - 如何在 mlr 管道中集成自定义学习器(在任何 R 包中均不可用)
- python - Python程序从cmd提示符运行时找不到chromedriver
- c - if 和 else 语句中的某处错误
- c++ - 如何减少 QInputDialog 对话框的模态?
- javascript - 如何用作为参考提供的路径替换嵌套道具?
- php - 如何从个人资料页面获取用户 ID 并在短代码中插入 id=
- microsoft-graph-api - 在夏令时创建事件时,Microsoft 图形返回错误请求