Maison  >  Article  >  développement back-end  >  Comment calculer les valeurs de lignes séquentielles dans un DataFrame Pandas à l'aide de Apply et Shifting ?

Comment calculer les valeurs de lignes séquentielles dans un DataFrame Pandas à l'aide de Apply et Shifting ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-28 16:43:02575parcourir

How to Calculate Sequential Row Values in a Pandas DataFrame Using Apply and Shifting?

Pandas applique des calculs de valeur de ligne séquentielle dans les dataframes

Lorsque vous travaillez avec des dataframes Pandas, vous pouvez rencontrer des situations où vous devez utiliser la valeur d'une ligne précédente dans un calcul. Cependant, cela peut présenter des défis, en particulier lorsque la valeur précédente est également calculée dans la même fonction d'application.

Considérez le cadre de données suivant :

Index_Date    A   B     C    D
================================
2015-01-31    10   10   Nan   10
2015-02-01     2    3   Nan   22 
2015-02-02    10   60   Nan  280
2015-02-03    10  100   Nan  250

Nous souhaitons créer une nouvelle colonne, C , où :

  • Pour le 31/01/2015, C est égal à D.
  • Pour toutes les autres lignes, C est calculé comme le C de la ligne précédente multiplié par le A de la ligne actuelle , plus le B de la ligne actuelle.

L'utilisation d'une fonction apply et d'un shift avec une condition if-else peut ne pas fonctionner en raison d'erreurs clés. Au lieu de cela, nous pouvons suivre ces étapes :

Étape 1 : Initialiser la valeur dérivée

Tout d'abord, nous définissons la valeur C de la première ligne pour qu'elle soit égale à D :

df.loc[0, 'C'] = df.loc[0, 'D']

Étape 2 : Itérer et calculer

Ensuite, nous parcourons les lignes restantes et calculons C en utilisant la valeur C de la ligne précédente :

for i in range(1, len(df)):
    df.loc[i, 'C'] = df.loc[i-1, 'C'] * df.loc[i, 'A'] + df.loc[i, 'B']

Résultat :

  Index_Date   A   B    C    D
0 2015-01-31  10  10   10   10
1 2015-02-01   2   3   23   22
2 2015-02-02  10  60  290  280
3 2015-02-03  10  100  3000  250

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn