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

How to pick values based on aggregation of other columns in a group by with 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 first and then aggregate 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