如何根据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
最高'grade'是'D' ? – jezrael
工作。谢谢! – Vince
我的意思是“最高等级”,如最高等级。 “最佳等级”实际上是最低等级值,所以我使用np.min来进行聚合。 – Vince