Maison >développement back-end >Tutoriel Python >Comment ajouter correctement une nouvelle colonne à un DataFrame Pandas après une opération groupby().sum() ?
Lors de l'exécution d'un calcul sur une colonne dans un Pandas DataFrame à l'aide de groupby() fonction, il est souvent nécessaire de réincorporer les résultats dans le DataFrame. Une façon d'y parvenir consiste à créer une nouvelle colonne basée sur les calculs groupés.
Dans l'exemple fourni, l'objectif est de créer une nouvelle colonne, Data4, qui contient la somme de la colonne Data3 pour chaque date. .
Le code présenté tente d'attribuer les résultats groupés directement à la nouvelle colonne, mais il donne des valeurs NaN. Pour résoudre ce problème, la méthode transform() doit être utilisée à la place :
df['Data4'] = df['Data3'].groupby(df['Date']).transform('sum')
La méthode transform() renvoie une Series alignée sur l'index du DataFrame, permettant de l'ajouter directement en tant que nouvelle colonne . Le paramètre 'sum' spécifie le calcul que nous voulons effectuer.
Le code mis à jour ci-dessous démontre l'application correcte de transform() :
import pandas as pd df = pd.DataFrame({ 'Date': ['2015-05-08', '2015-05-07', '2015-05-06', '2015-05-05', '2015-05-08', '2015-05-07', '2015-05-06', '2015-05-05'], 'Sym': ['aapl', 'aapl', 'aapl', 'aapl', 'aaww', 'aaww', 'aaww', 'aaww'], 'Data2': [11, 8, 10, 15, 110, 60, 100, 40], 'Data3': [5, 8, 6, 1, 50, 100, 60, 120] }) df['Data4'] = df['Data3'].groupby(df['Date']).transform('sum') print(df)
La sortie du code modifié calcule correctement le somme de Data3 pour chaque date et ajoute les résultats au DataFrame en tant que nouvelle colonne Data4 :
Date Sym Data2 Data3 Data4 0 2015-05-08 aapl 11 5 55 1 2015-05-07 aapl 8 8 108 2 2015-05-06 aapl 10 6 66 3 2015-05-05 aapl 15 1 121 4 2015-05-08 aaww 110 50 55 5 2015-05-07 aaww 60 100 108 6 2015-05-06 aaww 100 60 66 7 2015-05-05 aaww 40 120 121
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!