我有一个包含许多列的数据框,但我感兴趣的列是三列。它们是nameyeargoals_scored。这些列都不是唯一的,例如,我有类似以下内容的行:

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列。一个是名称,然后是2014、2015和2016年中的每个。最后三列是有关年份的Goals_scored的总和。因此,使用上面的数据将看起来像:
Name          2014     2015     2016
John Smith    5        5        1

更糟糕的是,他们只希望它包含所有三年都使用过的名称。

谁能指出我正确的方向?

最佳答案

需要 groupby ,聚合 sum 并通过 unstack 重塑形状:

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

10-06 05:22