Skip to main content
 首页 » 编程设计

python之与 Pandas 的参差不齐的转置

2025年05月04日35wayfarer

我有一个这样的数据表(忽略索引):

group, subgroup, score  
A, B, 0 
A, C, 1.5 
A, A, 5 
B, A, 1 
B, F, 1.5 
B, C, 0 
C, C, 2 
C, D, 3 

我想要一个这样的表:

group, subgroup w lowest score, w second lowest score, w third lowest 
A, B, C, A 
B, C, A, F 
C, C, D, (blank)  

我如何使用 Pandas 从一个到另一个?

请您参考如下方法:

这是一个非常紧凑的方法。为简单起见,我用排名覆盖了“分数”值,但如果您愿意,您可以保留原始分数(这样会稍微冗长一点)。

df['score'] = df.groupby('group')['score'].rank() 
df.set_index(['group','score']).unstack() 
 
      subgroup         
score        1  2    3 
group                  
A            B  C    A 
B            C  A    F 
C            C  D  NaN 

请注意,这会阻塞第一名或第二名并列的数据。您可以通过多种方式解决这个问题(例如,rank(method='first') 是一种方式,但 rank 也为您提供其他选项)。你没有具体说明,所以我不确定你想如何处理它。

编辑以添加:现在我正在更仔细地查看@JoeCondron 的回答,我意识到我的方法非常相似,但我认为它们有足够的不同,所以我会暂时搁置它而至少。特别是 Joe 负责排序而我负责排名,这对于您处理平局的方式可能很重要。