如何用Pandas高效删除时间间隔小于10秒的DataFrame行?
解决方案
可以用Pandas的diff()方法结合布尔索引实现,完全不需要循环,代码简洁高效:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'Index': [1, 2, 3, 4, 5], 'SecOfDay': [0, 10, 21, 23, 31] }).set_index('Index') # 计算当前行与前一行的数值差 diff_series = df['SecOfDay'].diff() # 生成过滤掩码:保留第一行,或差值≥10的行 mask = pd.isna(diff_series) | (diff_series >= 10) # 过滤得到目标结果 result_df = df[mask] print(result_df)
运行后输出结果:
SecOfDay Index 1 0 2 10 3 21 5 31
逻辑说明
diff()方法自动计算列中当前行与前一行的差值,第一行因无前置行返回NaN- 掩码通过
pd.isna(diff_series)保留第一行,diff_series >=10筛选出差值符合要求的行,两者用|(逻辑或)组合 - 布尔索引直接过滤DataFrame,性能远优于循环,尤其适配大数据量场景
内容的提问来源于stack exchange,提问作者zuhausebeidermann
相关产品推荐
相关产品推荐

