如何在pandas多索引分组DataFrame中提取列最大值对应的索引
pandas提取分组后每组最大值对应的属性值方案
假设你已经通过groupby得到了每个选手、每种场地对应的获胜次数统计DataFrame,示例结构如下:
| fullname | surface | win_count |
|---|---|---|
| Zuzana Zlochova | Hard | 12 |
| Zuzana Zlochova | Clay | 5 |
| Zuzanna Bednarz | Clay | 9 |
| Zuzanna Bednarz | Hard | 3 |
你可以直接用pandas原生的排序+去重逻辑实现需求,全程无迭代,适合大数据量场景:
# 第一步:按选手名称升序、获胜次数降序排序 sorted_win_df = win_stat_df.sort_values( by=["fullname", "win_count"], ascending=[True, False] ) # 第二步:去重保留每个选手的第一条记录,即获胜次数最多的场地 best_surface_df = sorted_win_df.drop_duplicates( subset="fullname", keep="first" )[["fullname", "surface"]] # 第三步:重命名列符合输出要求 best_surface_df = best_surface_df.rename(columns={"surface": "best_surface"})
如果遇到同一个选手多个场地获胜次数并列最高的情况,可以调整规则适配:
- 保留所有并列结果:将
drop_duplicates替换为groupby("fullname").head(N),N为你要保留的前N个并列项 - 按固定优先级选择场地:可以在
sort_values的by参数中增加场地排序规则,比如by=["fullname", "win_count", "surface"],按场地名称首字母排序选优先级高的
内容的提问来源于stack exchange,提问作者Francesco Fattori
相关产品推荐
相关产品推荐

