如何基于两个字段的条件删除Pandas DataFrame中的指定行
错误原因
- 运算符优先级问题:pandas中
&的优先级高于比较运算符!=,你原有代码没有给每个独立条件加括号,会先执行4 & df_2['date'] != '2021-01-01',逻辑完全不符合预期。 - 条件逻辑写反:你原有代码的逻辑是筛选「id不等于4 且 date不等于'2021-01-01'」的行,和你要实现的「删除id等于4且date不等于'2021-01-01'的行」的需求不匹配。
正确写法
你可以任选两种写法之一,两种写法效果完全一致:
方式1:正向写要保留的行逻辑
保留所有「id不等于4」或者「id等于4且date等于'2021-01-01'」的行:
df_2 = df_2[(df_2['id'] != 4) | (df_2['date'] == '2021-01-01')]
方式2:反向写要排除的行逻辑
直接排除「id等于4且date不等于'2021-01-01'」的行,用~对删除条件取反即可:
df_2 = df_2[~((df_2['id'] == 4) & (df_2['date'] != '2021-01-01'))]
两种写法运行后,和你给出的示例期望结果完全匹配。
内容的提问来源于stack exchange,提问作者user458
相关产品推荐
相关产品推荐

