如何根据Python Pandas中的其他列的聚合来选择值?

问题描述:

我有一个看起来像这样的数据:如何根据Python Pandas中的其他列的聚合来选择值?

system question answer grade rank 
sys1  q1   a1  A  5 
sys1  q1   a1  B  10 
sys2  q1   a1  C  1 
sys2  q1   a1  D  11 

我的目标是通过组问题和答案,以最好的档次和等级,以及最佳的等级相关联的系统。下面是我想要执行的一个示例:

>>df.groupby(['question', 'answer']).agg({'grade': np.min, 'rank': np.min, 'system': ???).reset_index() 
question answer grade rank system 
q1   a1  A  1  sys1 

我得到了我想要的等级和等级,因为我只是取最小值。什么是获得理想系统的最佳途径?

我认为你可以使用sort_values,然后再汇总last

print (df) 
    system question answer grade rank 
0 sys1  q1  a1  A  5 
1 sys2  q1  a1  B 10 
2 sys3  q1  a1  C  1 
3 sys4  q1  a1  D 11 

df = df.sort_values('grade') 
     .groupby(['question', 'answer']) 
     .agg({'grade': np.min, 'rank': np.min, 'system':'last'}) 
     .reset_index() 
print (df) 
    question answer system rank grade 
0  q1  a1 sys4  1  A 

我不敢肯定,但也许需要first

df = df.sort_values('grade') 
     .groupby(['question', 'answer']) 
     .agg({'grade': np.min, 'rank': np.min, 'system':'first'}) 
     .reset_index() 
print (df) 
    question answer system rank grade 
0  q1  a1 sys1  1  A 
+0

最高'grade'是'D' ? – jezrael

+0

工作。谢谢! – Vince

+0

我的意思是“最高等级”,如最高等级。 “最佳等级”实际上是最低等级值,所以我使用np.min来进行聚合。 – Vince