如何将多步Pandas数据筛选代码精简为1-2行高效代码?
精简Pandas筛选代码的方案
当然可以!咱们完全可以把这三个筛选条件合并到一个布尔索引里,用&逻辑与连接,再结合.loc一次性完成筛选和列选择,这样代码更简洁高效,还能避免多次赋值产生不必要的中间DataFrame。
精简后的一行代码
census_df = census_df.loc[ ((census_df['REGION'].between(1, 2)) & (census_df['CTYNAME'].str.match('Washington')) & (census_df['POPESTIMATE2015'] > census_df['POPESTIMATE2014'])), ['STNAME', 'CTYNAME'] ]
细节说明
- 用
df['REGION'].between(1, 2)替代原代码的(REGION >=1) & (REGION <=2),语法更简洁易读,功能完全一致; - 每个条件都用括号包裹起来,这很重要——因为Pandas的运算符优先级问题,如果不加括号会导致逻辑判断出错;
- 利用
.loc的第二个参数直接指定要保留的列['STNAME', 'CTYNAME'],省去了单独索引列的额外步骤; - 这种写法只需要对DataFrame做一次操作,比原代码的多次赋值更高效,尤其是处理大规模数据集时优势更明显。
小补充
如果你需要的是CTYNAME中包含“Washington”(而不是原代码中从开头匹配),可以把str.match换成str.contains,根据实际需求调整即可。
内容的提问来源于stack exchange,提问作者geojasm
相关产品推荐
相关产品推荐

