如何在Pandas多级索引DataFrame中提取姓名对应占比更高的性别数据
如何从多级索引DataFrame中提取每个姓名占比更高的性别记录?
背景回顾
你已经通过分组求和得到了一个以name和sex为多级索引的DataFrame,现在需要筛选出每个姓名下占比(percent)最高的那条性别记录。
解决方案
这里有几种简洁的方法可以实现你的需求:
方法1:利用多级索引直接筛选
假设你分组后的DataFrame名为grouped_df,可以通过按name层级分组后取最大值的索引来提取目标行:
# 先获取每个name组中percent最大的行的索引 max_indices = grouped_df.groupby(level='name')['percent'].idxmax() # 根据索引筛选出目标数据 final_df = grouped_df.loc[max_indices]
这样就能得到每个姓名对应占比最高的性别记录,输出格式和你期望的一致。
方法2:重置索引后处理(更直观)
如果你觉得多级索引操作有点绕,可以先把索引转为普通列,再进行筛选:
# 重置索引,让name和sex成为普通列 reset_df = grouped_df.reset_index() # 按name分组,取每组中percent最大的行 final_df = reset_df.loc[reset_df.groupby('name')['percent'].idxmax()] # 可选:如果需要恢复多级索引,可以再设置回去 final_df = final_df.set_index(['name', 'sex'])
方法3:排序后去重
另一种思路是先按占比降序排序,然后保留每个姓名的第一条记录(也就是占比最高的那条):
final_df = grouped_df.reset_index()\ .sort_values('percent', ascending=False)\ .drop_duplicates('name')\ .set_index(['name', 'sex'])
这种方法逻辑简单易懂,适合刚接触pandas的用户。
验证结果
运行上述任意一种方法后,你都会得到期望的输出:
percent name sex Aaron boy 0.292292 Abagail girl 0.001326 Abbie girl 0.022804
内容的提问来源于stack exchange,提问作者josh453
相关产品推荐
相关产品推荐

