Supposons que j'ai une colonne comme celle-ci:
a b
1 5
1 7
2 3
1 3
2 5
Je veux résumer les valeurs pour b
où a = 1
, par exemple. Cela me donnerait 5 + 7 + 3 = 15
.
Comment est-ce que je fais ceci dans les pandas?
L'idée essentielle ici est de sélectionner les données que vous voulez additionner, puis de les additionner. Cette sélection de données peut être effectuée de différentes manières, dont certaines sont présentées ci-dessous.
Le moyen le plus courant de sélectionner les valeurs consiste à utiliser indexation booléenne .
Avec cette méthode, vous découvrez où la colonne 'a' est égale à 1
puis additionnez les lignes correspondantes de la colonne 'b'. Vous pouvez utiliser loc
pour gérer l'indexation des lignes et des colonnes:
>>> df.loc[df['a'] == 1, 'b'].sum()
15
L'indexation booléenne peut être étendue à d'autres colonnes. Par exemple, si df
contenait également une colonne 'c' et que nous voulions additionner les lignes de 'b' où 'a' valait 1 et 'c' valait 2, nous écririons:
df.loc[(df['a'] == 1) & (df['c'] == 2), 'b'].sum()
Une autre façon de sélectionner les données consiste à utiliser query
pour filtrer les lignes qui vous intéressent, sélectionnez la colonne 'b' puis additionnez:
>>> df.query("a == 1")['b'].sum()
15
Là encore, la méthode peut être étendue pour effectuer des sélections plus complexes des données:
df.query("a == 1 and c == 2")['b'].sum()
Notez que ceci est un peu plus concis que l'approche d'indexation booléenne.
L’approche alternative consiste à utiliser groupby
pour scinder le DataFrame en plusieurs parties en fonction de la valeur de la colonne 'a'. Vous pouvez ensuite additionner chaque partie et extraire la valeur additionnée par les 1:
>>> df.groupby('a')['b'].sum()[1]
15
Cette approche sera probablement plus lente que l’indexation booléenne, mais elle est utile si vous souhaitez vérifier les sommes des autres valeurs de la colonne a
:
>>> df.groupby('a')['b'].sum()
a
1 15
2 8
Vous pouvez également le faire sans utiliser groupby ou loc. En incluant simplement la condition dans le code. Laissez le nom de dataframe être df. Ensuite, vous pouvez essayer:
df[df['a']==1]['b'].sum()
ou vous pouvez aussi essayer:
sum(df[df['a']==1]['b'])
Une autre solution consiste à utiliser la bibliothèque numpy de python:
import numpy as np
print(np.where(df['a']==1, df['b'],0).sum())