如何在Pandas中从符合条件的行开始高效删除100行?
更简洁高效的实现方式
可以通过分步定位目标索引、减少冗余DataFrame构造来优化代码,同时提升可读性和执行效率:
基础优化版
# 找到column_name列首次小于21000的行索引 first_idx = df[df[column_name] < 21000].index[0] # 获取从该行开始的101行索引(包含自身及后续100行) idx_to_drop = df.loc[first_idx:].index[:101] # 删除目标行 df.drop(idx_to_drop, inplace=True)
带边界检查的稳健版
如果存在没有任何行满足条件的情况,直接取index[0]会报错,建议加上判断逻辑:
# 生成满足条件的布尔掩码 mask = df[column_name] < 21000 if mask.any(): # 获取第一个满足条件的行索引(等价于mask[mask].index[0],写法更简洁) first_idx = mask.idxmax() # 截取目标索引范围 idx_to_drop = df.loc[first_idx:].index[:101] df.drop(idx_to_drop, inplace=True)
优化点说明
- 原代码嵌套多层
pd操作,重复构造临时DataFrame,既影响可读性也降低执行效率;优化后的代码分步清晰,直接定位目标索引,减少不必要的内存开销。 - 使用
mask.idxmax()替代df[mask].index[0],写法更简洁,功能完全一致(返回布尔序列中第一个True对应的索引)。
内容的提问来源于stack exchange,提问作者Leland
相关产品推荐
相关产品推荐

