数据帧透视函数重复条目错误

问题描述 投票:0回答:1

我正在使用数据框枢轴函数,如下所示,但出现以下错误:

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

如何在上面的代码中实现这一点?

python dataframe pivot aggregate-functions
1个回答
0
投票

您可以使用

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
© www.soinside.com 2019 - 2024. All rights reserved.