同一Pandas DataFrame实现多条件组合过滤的最佳方法
Pandas多条件筛选合并方案
- 逻辑简化说明
你要筛选的两类行可以直接做逻辑合并,两类行的特征分别是:- Areacode匹配、t字段不匹配
- Areacode不匹配、t字段不匹配
可以看到两类行的共性是t字段一定不匹配,如果你的需求确实是排除所有t字段匹配的行(包括t匹配但Areacode不匹配的行),可以直接用最简写法:
filtered_df = merged_df.loc[merged_df['t_1'] != merged_df['t_2']]
- 如果你实际需求是仅剔除「t和Areacode都完全匹配」的行,其余所有行都保留(包含t匹配但Areacode不匹配的行),可以用反向筛选写法:
# ~ 代表逻辑取反,直接排除两个字段都匹配的行 filtered_df = merged_df.loc[~((merged_df['t_1'] == merged_df['t_2']) & (merged_df['Areacode_1'] == merged_df['Areacode_2']))]
- 如果你就是要把原有两个条件直接拼接,也可以用逻辑或
|连接,写法如下(和第一种最简写法逻辑完全等价):
filtered_df = merged_df.loc[ ((merged_df['t_1'] != merged_df['t_2']) & (merged_df['Areacode_1'] == merged_df['Areacode_2'])) | ((merged_df['t_1'] != merged_df['t_2']) & (merged_df['Areacode_1'] != merged_df['Areacode_2'])) ]
以上三种写法在你提供的样例数据上运行,都会得到你预期的输出结果,自动剔除George对应的全匹配行。
内容的提问来源于stack exchange,提问作者aero8991
相关产品推荐
相关产品推荐

