首页 > 解决方案 > python - 如何在 python 数据框中执行以下操作

问题描述

下面是我的df

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

})

我想要输出 val2 如下图所示。row1 与 val1 的 row1 相同,但 row2 及以下是使用公式计算的,如图所示

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

标签: pythonpandasdataframe

解决方案


因此,所有行都依赖于前面的行,因为 C4 取决于 C3 的计算。所以我们能做的就是直接对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

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

推荐阅读