如何获取Pandas Groupby分组后每个weakness下计数最大的type值
实现步骤
你得到的gf是二级索引(weakness、type)的计数Series,按以下逻辑处理即可满足需求:
- 将计数Series转为DataFrame,明确计数字段名
# 把计数列命名为count,同时展开两层索引为普通列 gf_df = gf.reset_index(name='count')
- 按规则排序:同一
weakness下先按计数降序排列,计数相同时按type的字母升序排列
gf_sorted = gf_df.sort_values( by=['weakness', 'count', 'type'], ascending=[True, False, True] )
- 按
weakness分组,取每组的第一条结果即为符合要求的条目
result = gf_sorted.groupby('weakness').first().reset_index()
如果只需要保留weakness和对应的最大计数type,可以在最后加列筛选:
result = result[['weakness', 'type']]
原理解释
排序逻辑保证了每个weakness分组内,优先级最高的条目(计数最大、同计数时字母序最靠前)会排在分组的第一位,直接取分组首行即可得到正确结果。之前取尾行未得到正确结果的核心原因是排序规则不匹配,没有同时兼顾计数降序和type升序的双重排序要求。
内容的提问来源于stack exchange,提问作者Vidarshana Dissanayaka
相关产品推荐
相关产品推荐

