如何删除DataFrame中不属于指定长度连续日期序列的行
解决方案
完全不用逐行遍历,用pandas原生向量化操作即可,处理百万级数据也没有性能压力,逻辑和你的需求完全匹配:
核心逻辑
通过相邻日期的差值拆分连续日期块,直接过滤长度不达标的块即可,代码实现如下:
import pandas as pd # 1. 预处理:先对日期列排序+转格式,若你的原始数据已经按日期升序排列可跳过排序步骤 df = df.sort_values('Date', ignore_index=True) df['Date'] = pd.to_datetime(df['Date'], format='%d.%m.%Y') # 2. 标记连续日期分组:日期差超过1天的位置就生成新的分组ID df['group_id'] = df['Date'].diff().dt.days.ne(1).cumsum() # 3. 过滤长度>=t的分组,删除辅助列得到结果 t = 3 # 替换为你需要的连续天数阈值 df_res = df.groupby('group_id').filter(lambda x: len(x) >= t).drop(columns='group_id')
效果验证
和你给出的示例完全匹配:
- 当
t=3时,13号所在的分组长度只有1,被过滤,仅保留前7行 - 当
t=4时,4-6号所在分组长度为3、13号所在分组长度为1,均被过滤,仅保留8-11号的4行数据
注意事项
如果你的日期存在重复值,可先执行df = df.drop_duplicates('Date', keep='first', ignore_index=True)去重后再执行上述逻辑,避免分组统计长度出错。
内容的提问来源于stack exchange,提问作者Matrixboy
相关产品推荐
相关产品推荐

