简体   繁体   English

python - 如何在 python 数据帧中执行以下操作

[英]python - how do I perform the below operation in python dataframe

below is my df下面是我的 df

df = pd.DataFrame({
                   'Sr. No': [1, 2, 3, 4, 5, 6],
                    'val1' : [2,3,2,4,1,2],

})

I want output val2 as show in the below figures.我想要输出 val2 如下图所示。 row1 is same as row1 of val1 but row2 and below is calculated using a formula, as shown row1 与 val1 的 row1 相同,但 row2 及以下是使用公式计算的,如图

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

So all rows are dependent on the previous as C4 depends on the calculation of C3 for instance.所以所有的行都依赖于前一个,因为 C4 依赖于 C3 的计算。 So what we can do is to operate on the numpy arrays directly.所以我们能做的就是直接对numpy数组进行操作。

sr_no_vals = df['Sr. No'].values
val1_vals = df['val1'].values
val2_vals = [val1_vals[0]]

for i in range(1, len(sr_no_vals)):
    calculated_value = (((1 + val2_vals[i - 1]) ** sr_no_vals[i - 1]) * (1 + val1_vals[i])) ** (1 / sr_no_vals[i]) 
    val2_vals.append(calculated_value)

df['val2'] = val2_vals

When operating with numpy arrays, we can also use a just-in-time compiler such as numba to speed up the operation by a huge factor for large data.在操作 numpy 数组时,我们还可以使用诸如 numba 之类的即时编译器,以极大地加快大数据的操作速度。

@numba.jit(nopython=True)
def calc_val2(val1_vals, sr_no_vals):
    val2_vals = [val1_vals[0]]
    for i in range(1, len(sr_no_vals)):
        calculated_value = (((1 + val2_vals[i - 1]) ** sr_no_vals[i - 1]) * (1 + val1_vals[i])) ** (1 / sr_no_vals[i]) 
        val2_vals.append(calculated_value)
    return val2_vals

df['val2'] = calc_val2(val1_vals, sr_no_vals)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM