Pandas取Limit列Top10与Bottom10用Number列做同分决胜实现问题
解决方案
报错原因
df10.head(10)['Limit'].duplicated() 返回的是布尔类型的Series,if 条件要求传入单个布尔值,pandas无法直接判定整个Series的真值,因此触发了该歧义报错。
实现代码
你不需要手动判断重复值,直接通过多字段排序规则即可实现需求:
# 提取Top10:先按Limit降序,Limit相同按Number降序,取前10条 top10 = df1[['Number', 'Limit']].sort_values(by=['Limit', 'Number'], ascending=[False, False]).head(10) # 提取Bottom10:先按Limit升序,Limit相同按Number降序,取前10条 bottom10 = df1[['Number', 'Limit']].sort_values(by=['Limit', 'Number'], ascending=[True, False]).head(10)
代码说明
- sort_values的
by参数传入多列时,会按传入顺序优先级排序:优先按Limit排序,Limit值相同的行再按Number排序 ascending参数与by的列一一对应:- Top10场景下Limit用降序(大值在前),Number用降序(同分情况下Number大的排在前)
- Bottom10场景下Limit用升序(小值在前),Number用降序(同分情况下Number大的排在前)
如果仅需要提取Limit列的结果,在末尾追加['Limit']即可,例如top10_limit = top10['Limit']。
内容的提问来源于stack exchange,提问作者Laura V.
相关产品推荐
相关产品推荐

