python - làm cách nào để thực hiện thao tác dưới đây trong khung dữ liệu python

Nov 08 2020

dưới đây là df của tôi

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

})

Tôi muốn giá trị đầu ra như hiển thị trong các hình dưới đây. row1 giống với row1 của val1 nhưng row2 trở xuống được tính bằng công thức, như được hiển thị

Trả lời

1 mlang Nov 08 2020 at 12:34

Vì vậy, tất cả các hàng phụ thuộc vào hàng trước như C4 phụ thuộc vào phép tính của C3 chẳng hạn. Vì vậy, những gì chúng ta có thể làm là thao tác trực tiếp trên các mảng 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

Khi hoạt động với mảng numpy, chúng ta cũng có thể sử dụng một trình biên dịch vừa đúng lúc như numba để tăng tốc hoạt động bởi một yếu tố rất lớn đối với dữ liệu lớn.

@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)