python - 创建一个引用其值的 Pandas 列
问题描述
我正在尝试将 VBA 宏转换为 python 脚本。我需要向数据框添加一个新列:
X Y
1 2
3 4
5 6
7 8
这将是上面的值(第一个为 0)和 X 中的值乘以 Y 与上面的值相加的总和:
X Y Z Z(calculations)
1 2 0 0
3 4 12 0 + 3*(4+0)
5 6 102 12 + 5*(6+12)
7 8 872 102 + 7*(8+102)
所以基本上是 Excel 公式(在 Z2 单元格中):
=Z1+X2*(Y2+Z1)
有没有简单(快速)的方法来做到这一点?
解决方案
您可以使用 for 循环来做到这一点,但由于您要求一种快速的方法,您可以使用 numba 和@njit 来做到这一点:
from numba import njit
import pandas as pd
import numpy as np
@njit
def calculate(X, Y):
res = np.empty(X.shape)
res[0] = 0
for i in range(1, res.shape[0]):
res[i] = res[i-1] + (X[i] * (Y[i] + res[i-1]))
return res
df = pd.DataFrame({"X": [1,3,5,7], "Y": [2,4,6,8]})
df
X Y
0 1 2
1 3 4
2 5 6
3 7 8
df["Z"] = calculator_nb(*df[["X", "Y"]].values.T)
df
X Y Z
0 1 2 0.0
1 3 4 12.0
2 5 6 102.0
3 7 8 872.0
归功于这篇文章
推荐阅读
- python - 在 NGINX 中创建别名 url(在 Docker 中使用 proxy_pass)
- android - 如何以编程方式获取我的 Android 设备的 CPU 和处理器信息?
- azure-functions - Azure Functions 与可怜的 Mans 依赖注入?
- python - 嵌套情况下如何使用jinja2处理dict和list
- python - 如何将标题“Access-Control-Allow-Origin”设置为 selenium Webdriver
- php - 如何根据日期时间字段上的更新时间查找记录?
- css - 应用插件(niceselect)时,角度选择(更改)方法不起作用
- wiremock - 是否可以使用 Java 版本的 Wiremock-standalone 模拟两个端口?
- python - 如何将函数作为单独函数的一部分应用于 DataFrame
- jpeg - 如何强制 ROScompressed_image_transport 使用 libturbojpeg 进行 jpeg 压缩?