Pandas实操:删除多级索引下仅含单种ans值的对应分组行
解决方案
首先确保你的DataFrame已经将no和ans设置为多级索引,未设置的话先执行:
df = df.set_index(['no', 'ans'])
方法1:分组过滤(逻辑直观,适合小数据量)
直接按no分组,筛选同时包含Yes和No的分组即可:
result = df.groupby(level='no').filter( lambda g: {'Yes', 'No'}.issubset(g.index.get_level_values('ans').unique()) )
方法2:索引筛选(性能更高,适合百万级以上大数据量)
先统计符合条件的no值,再直接按索引过滤:
# 统计每个no对应的ans数量,保留数量为2的no keep_nos = df.index.get_level_values('no').value_counts()[lambda s: s == 2].index # 过滤出符合条件的行 result = df[df.index.get_level_values('no').isin(keep_nos)]
两种方法最终输出的result都符合要求:
freq no ans 1 Yes 23 No 89 2 Yes 45 No 76
内容的提问来源于stack exchange,提问作者FafamKurac123
相关产品推荐
相关产品推荐

