我正在使用数据框枢轴函数,如下所示,但出现以下错误:
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
'Serialno': [1,2,2,1,1,2,2,1]
'position': ['G', 'G', 'F', 'F', 'G', 'G', 'F', 'F'],
'points': [5, 7, 7, 9, 4, 9, 9, 12]})
ValueError: Index contains duplicate entries, cannot reshape
代码如下:
df.pivot_table(index='team', columns='position', values='points')
当我在线研究这个问题时,我发现根本原因是相同索引、列组合的数据重复,下面是建议的修复方法。
df.pivot_table(index='team', columns='position', values='points', aggfunc='sum')
但在我的场景中,我需要在新列(不是列、值的一部分)上应用聚合函数。我有一个序列号列,如果重复,我需要选择具有更高序列号的值。
在上面的例子中我想要这个输出:
position F G
team
A 7 7
B 9 9
如何在上面的代码中实现这一点?
您可以使用
groupby
仅保留 pivot
之前的相关行(具有最大序列号):
output = (df[df["Serialno"].eq(df.groupby("team")["Serialno"].transform("max"))]
.pivot(index="team",columns="position",values="points")
)
>>> output
position F G
team
A 7 7
B 9 9