Les Pandas somme par groupby, mais exclure certaines colonnes
Quel est le meilleur moyen de faire un groupe sur une Pandas dataframe, mais exclure certaines colonnes à partir de ce groupe? par exemple, j'ai le texte suivant dataframe:
Code Country Item_Code Item Ele_Code Unit Y1961 Y1962 Y1963
2 Afghanistan 15 Wheat 5312 Ha 10 20 30
2 Afghanistan 25 Maize 5312 Ha 10 20 30
4 Angola 15 Wheat 7312 Ha 30 40 50
4 Angola 25 Maize 7312 Ha 30 40 50
Je veux groupby la colonne Pays et Item_Code et seulement calculer la somme des lignes tombent sous les colonnes Y1961, Y1962 et Y1963. Le résultant dataframe devrait ressembler à ceci:
Code Country Item_Code Item Ele_Code Unit Y1961 Y1962 Y1963
2 Afghanistan 15 C3 5312 Ha 20 40 60
4 Angola 25 C4 7312 Ha 60 80 100
Je fais ceci:
df.groupby('Country').sum()
Toutefois cela s'ajoute les valeurs de la Item_Code colonne. Est-il possible que je peux spécifier les colonnes à inclure dans le sum()
opération et ceux à exclure?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez sélectionner les colonnes d'un groupby:
Noter que la liste transmise doit être un sous-ensemble des colonnes sinon, vous allez voir un KeyError.
listColumns = list(df.columns)
ensuite, vous enlevez les colonnes que vous ne voulez pas,listColumns.remove('Y1964')
et enfin faire votre sommation:df.groupby(['Country', 'Item_Code'])[listColumns].sum()
cannot reindex from a duplicate axis
df.groupby({columns1])[columns2].sum()
retour d'un dataframe alors quedf.groupby({columns1])[columns2].size()
me donnera une série de données en sortie? Merci.iloc
que la spécification du nom ne fonctionne pas ici. Merci encoredf.iloc[:, [0,1, 2, 3]].groupby(...)
, 0, 1, 2 sont les colonnes que vous souhaitez tranche. Renommage de sorte que vous n'avez pas de doublons est aussi une solutiondf.groupby([A, B, C)[[D, E, F]].sum()
semble donner le même résultat quedf.groupby([A, B, C)[D, E, F].sum()
. Pourriez-vous me dire pourquoi vous avez utilisé deux paires de crochets s'il vous plaît? Merci encore.La
agg
de la fonction le fera pour vous. Passer les colonnes et la fonction comme dict avec colonne de sortie:Cette affiche uniquement le groupe par des colonnes, et la totale déterminée colonnes. Dans cet exemple, j'ai inclus deux agg fonctions s'appliquent à la "Y1962'.
D'obtenir exactement ce que vous espériez voir, inclus les autres colonnes dans le groupe, et appliquer sommes à l'axe des variables dans le cadre:
Si vous êtes à la recherche d'une plus généralisée de manière à s'appliquer à de nombreuses colonnes, ce que vous pouvez faire est de construire une liste de noms de colonnes et de le transmettre comme l'indice de l'regroupés dataframe. Dans votre cas, par exemple: