2017-10-17 12 views
1

私はいくつかの列を持つデータフレームを持っていますが、興味があります。これらはname,yearおよびgoals_scoredです。これらの列のいずれもが、例えば、私は、次のような行を持っているという点でユニークではない:私がやろうとしています1列のPandas groupby()と別の列の合計

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 

何をすることは、私は4列を持つ新しいデータフレームを作成することです。 1つは名前、次に2014年、2015年および2016年のそれぞれに1つです。最後の3つの列は、問題の年度のゴールの合計です。彼らは唯一のそれはすべての3つの年のために何かを持っているそれらの名前を含めることがさらに悪いことに

Name   2014  2015  2016 
John Smith 5  5  1 

:だから、上記のデータを使用すると、次のようになります。

誰でも正しい方向に向けることができますか?

答えて

2

groupbyが必要集約sumunstackによって再構築:

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

代替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 

df = df.reset_index().rename_axis(None, 1) 
print (df) 
     Name 2014 2015 2016 
0 John Smith  5  5  1 
関連する問題