如何更简洁地基于MultiIndex的索引条件删除Pandas DataFrame行?
如何更简洁地基于MultiIndex的索引条件删除Pandas DataFrame行?
哈哈,我太懂这种写绕弯代码的别扭感了——明明是个简单的索引筛选,却要堆一堆drop+loc的嵌套,肯定有更顺手的方式!针对你这个多级索引的场景,我整理了几个比当前实现更简洁直观的写法:
方法1:直接用loc筛选保留目标行(首推!)
与其先定位要删除的行再调用drop,不如直接筛选出你需要保留的行,逻辑更直白,代码也更短:
df = df.loc[df.index.get_level_values(1) >= 150]
这个写法的核心是把“删除不符合条件的行”转化为“保留符合条件的行”,读代码的时候一眼就能明白你要留下第二级索引≥150的记录,完全不需要绕弯子。
方法2:用query方法,语法像SQL一样好读
刚好你的第二级索引有命名(name),Pandas的query方法可以直接用索引名称来写条件,写法超清爽:
df = df.query("name >= 150")
要是你的多级索引没设置名称也没关系,用level_0、level_1这类默认名称就能指代对应层级(比如第二级索引就写level_1 >= 150),同样好用。
用这两种方法得到的结果和你原来的输出完全一致,比如运行query后的结果就是:
data name 0 200 3 300 5 1 200 4 300 6
是不是比你之前的嵌套写法舒服太多啦?
备注:内容来源于stack exchange,提问作者Petra
相关产品推荐
相关产品推荐

