python - comment effectuer l'opération ci-dessous dans le dataframe python

Nov 08 2020

ci-dessous est mon df

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

})

Je veux une sortie val2 comme le montrent les figures ci-dessous. row1 est identique à row1 de val1 mais row2 et ci-dessous est calculé à l'aide d'une formule, comme indiqué

Réponses

1 mlang Nov 08 2020 at 12:34

Donc toutes les lignes dépendent de la précédente car C4 dépend du calcul de C3 par exemple. Donc, ce que nous pouvons faire est d'opérer directement sur les tableaux 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

Lorsque vous utilisez des tableaux numpy, nous pouvons également utiliser un compilateur juste à temps tel que numba pour accélérer l'opération d'un facteur énorme pour les données volumineuses.

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