You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中移除间隔≤4天的连续行(保留首行)

Pandas DataFrame按日期间隔过滤:保留间隔>4天的首行

需求:处理Pandas DataFrame时,需按以下规则筛选行:

  • 以第一行为基准,后续行若和最近保留的行日期间隔≤4天,就移除;
  • 若间隔超过4天,就保留该行,并把它作为新的基准继续对比后面的行。

举个例子:

  • 2018-02-20和2018-02-16间隔≤4天 → 删掉2018-02-20那行
  • 删掉后,用2018-02-16和2018-02-21对比,间隔5天(>4天)→ 留着2018-02-21
  • 2018-02-22和2018-02-21间隔1天 → 删掉2018-02-22
  • 2018-02-26和2018-02-21间隔5天 → 留着2018-02-26

示例输入

先构造示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'Date': ['2018-02-16', '2018-02-20', '2018-02-21', '2018-02-22', '2018-02-26',
             '2018-03-01', '2018-03-02', '2012-09-28', '2012-10-01', '2012-10-02', '2012-10-21'],
    'Open': [69.75, 65.7, 60.0, 67.65, 77.666666, 73.5, 66.75, 0.5, 0.5, 0.575, 0.13]
}, index=[0,1,2,3,4,8,9,3,4,5,6])

解决方案

下面是实现逻辑的代码:

# 把Date列转成日期格式,才能计算天数差
df['Date'] = pd.to_datetime(df['Date'])

# 初始化一个列表,标记哪些行要保留,默认第一行留着
keep = [True] * len(df)
# 记录上一个保留行的日期,先拿第一行的日期当基准
last_keep_date = df['Date'].iloc[0]

# 从第二行开始遍历每一行
for i in range(1, len(df)):
    current_date = df['Date'].iloc[i]
    # 算当前行和上一个保留行的天数差
    days_diff = (current_date - last_keep_date).days
    if days_diff <= 4:
        # 间隔≤4天,标记为不保留
        keep[i] = False
    else:
        # 间隔>4天,标记为保留,同时更新基准日期
        keep[i] = True
        last_keep_date = current_date

# 用标记列表过滤原DataFrame,得到结果
result_df = df[keep]

代码解释

  • 先转日期格式是必须的,不然字符串没法算天数差;
  • 遍历的时候不是和相邻行比,而是和上一个成功保留的行比,这是核心逻辑;
  • 每保留一行就更新基准日期,确保后续对比的是最近的保留行。

最终结果

运行代码后得到的result_df就是期望的结果:

Date       Open
0 2018-02-16  69.750000
2 2018-02-21  60.000000
4 2018-02-26  77.666666
3 2012-09-28   0.500000
6 2012-10-21   0.130000

内容的提问来源于stack exchange,提问作者MasayoMusic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:15:44