如何使用.loc同时筛选Type 1为Grass且Type 2为Ground?求高效实现方法
多条件筛选DataFrame的方法与优化
嘿,我来帮你搞定这个多条件数据筛选的问题!你原来的代码是单条件筛选,要同时满足Type 1为Grass和Type 2为Ground,有几种直观又高效的写法:
方法一:使用loc与逻辑与&
这是最常用的方式,一定要给每个条件单独加括号(因为==的运算符优先级比&高,不加括号会导致逻辑错误):
filtered_pk = pk.loc[(pk['Type 1'] == 'Grass') & (pk['Type 2'] == 'Ground')]
方法二:使用query()方法(更简洁)
如果你的列名包含空格(比如这里的Type 1、Type 2),需要用反引号把列名括起来,写法更接近自然语言,可读性拉满:
filtered_pk = pk.query("`Type 1` == 'Grass' and `Type 2` == 'Ground'")
更高效的优化技巧
如果你的数据集很大,想要进一步提升筛选速度,可以试试这两个技巧:
- 将分类列转为
category类型:如果Type 1和Type 2的取值重复率很高,提前把它们转为类别类型能大幅降低内存占用,同时加速筛选操作:pk['Type 1'] = pk['Type 1'].astype('category') pk['Type 2'] = pk['Type 2'].astype('category') - 优先用向量化操作:绝对不要用Python循环逐行判断,pandas的
loc和query都是底层基于C实现的向量化操作,速度比循环快几个数量级。
内容的提问来源于stack exchange,提问作者Aids_man
相关产品推荐
相关产品推荐

