Pandas从末行向上删除满足多列条件的行的实现方案咨询
实现方案
你可以直接通过倒序查找有效位置的方式实现需求,全程不需要额外存储条件列,核心代码如下:
import pandas as pd # 先确认ydot、zdot列确实存在,可先执行 print(df.columns) 核对列名 # 构造删除条件:xdot、ydot、zdot均小于1e-4,如需判断绝对值可保留.abs(),否则删掉即可 del_mask = (df['xdot'].abs() < 1e-4) & (df['ydot'].abs() < 1e-4) & (df['zdot'].abs() < 1e-4) if del_mask.all(): # 边界情况:所有行都符合删除条件,可根据需求返回空表/原表 df_filtered = pd.DataFrame(columns=df.columns) else: # 倒序查找第一个不符合删除条件的行的位置,作为截断边界 last_keep_idx = del_mask[::-1].idxmin() # 截取从开头到该位置的所有行,自动过滤掉末尾符合删除条件的行 df_filtered = df.loc[:last_keep_idx]
逻辑说明
del_mask为True的行就是你要删除的行,倒序后第一个值为False的位置,就是从末尾往上数第一个需要保留的行- 直接按索引截取到该位置即可,所有在它之后的、符合删除条件的末尾行会被自动剔除
- 若不需要保留原df,可直接替换为
df = df.loc[:last_keep_idx]减少内存占用
内容的提问来源于stack exchange,提问作者adamcircle
相关产品推荐
相关产品推荐

