2017-10-17 3 views
1

J'ai une trame de données avec un certain nombre de colonnes, mais avec trois je suis intéressé. Ce sont name, year et goals_scored. Aucune de ces colonnes sont uniques en ce par exemple, j'ai des lignes comme les suivantes:Pandas groupby() sur une colonne, puis somme sur une autre

Name   Year  Goals_scored 
John Smith  2014  3 
John Smith  2014  2 
John Smith  2014  0 
John Smith  2015  1 
John Smith  2015  1 
John Smith  2015  2 
John Smith  2015  1 
John Smith  2015  0 
John Smith  2016  1 
John Smith  2016  0 

Ce que je suis en train de faire est de créer une nouvelle trame de données où j'ai 4 colonnes. Un pour le nom, puis un pour chacune des années 2014, 2015 et 2016. Les trois dernières colonnes étant la somme des buts marqués pour l'année en question. Donc, en utilisant les données ci-dessus, il ressemblerait à ceci:

Name   2014  2015  2016 
John Smith 5  5  1 

Pour empirer les choses, ils veulent que pour inclure les noms qui ont quelque chose pour tous les trois ans.

Quelqu'un peut-il me diriger dans la bonne direction?

Répondre

2

Besoin groupby, global sum et remodeler par unstack:

df = df.groupby(['Name','Year'])['Goals_scored'].sum().unstack() 
print (df) 
Year  2014 2015 2016 
Name       
John Smith  5  5  1 

Alternative pivot_table:

df = df.pivot_table(index='Name',columns='Year', values='Goals_scored', aggfunc='sum') 
print (df) 
Year  2014 2015 2016 
Name       
John Smith  5  5  1 

Dernière pour la colonne de l'index:

df = df.reset_index().rename_axis(None, 1) 
print (df) 
     Name 2014 2015 2016 
0 John Smith  5  5  1