如何根据 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
我有这样的数据:
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