Pandas如何正确删除DataFrame中SPCD==104且Age≥950的行
问题根因
你写的代码没有执行删除操作,只是把同时满足SPCD列值为104、Age列值≥950的行单独筛选出来赋值给了dropped_ages,没有对原DataFrame做保留/删除的过滤逻辑。你修改比较符号后结果仍不对,核心是逻辑方向错了:删除指定行本质是保留所有不满足删除条件的行,需要对删除条件整体取反,而非单独修改Age列的比较运算符。
正确实现方案
两种常用写法都能得到预期结果:
- 方法1:布尔索引直接取反筛选
对删除条件整体加~取反,直接筛选出所有需要保留的行,写法最简洁:result = d_age[ ~((d_age['SPCD'] == 104) & (d_age['Age'] >= 950)) ] - 方法2:定位待删行后按索引删除
如果需要先留存待删除行的记录,可以先匹配到待删行,再通过索引执行删除:# 匹配所有需要删除的行 to_drop = d_age[(d_age['SPCD'] == 104) & (d_age['Age'] >= 950)] # 按索引删除待删行 result = d_age.drop(index=to_drop.index)
结果校验
用你提供的样例数据运行上述代码,输出结果和预期完全匹配:
SPCD Age 1 104 300 2 104 950 3 133 200 4 104 400 5 133 100
如果需要和你给出的预期结果一样从0开始重置连续索引,只需要在结果后追加
.reset_index(drop=True)即可。
内容的提问来源于stack exchange,提问作者sarakota
相关产品推荐
相关产品推荐

