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

如何基于Datetime(每15分钟)删除Pandas DataFrame中的行?

Pandas按15分钟时间间隔过滤行的解决方案

根据你提供的示例数据和期望结果,推测实际需求是保留第一行,以及所有与上一行时间间隔≥15分钟的行(原需求描述存在表述误差,若严格按原描述执行会得到不符的结果)。以下是两种对应场景的实现方案:

方案一:匹配期望结果的过滤逻辑

该方案会删除所有与上一行时间间隔小于15分钟的行,最终结果与你给出的示例一致:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({"DateTime":["2020-04-02 06:06:22","2020-04-02 06:12:22","2020-04-02 06:35:34","2020-04-02 07:06:09",
                               "2020-04-02 07:10:34","2020-04-02 07:41:44"],
                   "Data":[23, 31, 10, 23, 56, 81]})

# 转换DateTime列为datetime类型
df["DateTime"] = pd.to_datetime(df["DateTime"])

# 计算每行与上一行的时间差(单位:分钟)
time_diff = df["DateTime"].diff().dt.total_seconds() / 60

# 构建过滤掩码:保留第一行,或时间差≥15分钟的行
mask = time_diff >= 15
mask.iloc[0] = True  # 强制保留第一行

# 过滤得到结果
result_df = df[mask]
print(result_df)

运行输出:

DateTime  Data
0 2020-04-02 06:06:22    23
2 2020-04-02 06:35:34    10
3 2020-04-02 07:06:09    23
5 2020-04-02 07:41:44    81

方案二:严格按原描述执行的逻辑

若严格遵循“若某行的下一行时间与当前行间隔小于15分钟,则删除该行”的描述,实现代码如下(结果与期望不符,仅作参考):

import pandas as pd

# 构造并预处理数据(同方案一)
df = pd.DataFrame({"DateTime":["2020-04-02 06:06:22","2020-04-02 06:12:22","2020-04-02 06:35:34","2020-04-02 07:06:09",
                               "2020-04-02 07:10:34","2020-04-02 07:41:44"],
                   "Data":[23, 31, 10, 23, 56, 81]})
df["DateTime"] = pd.to_datetime(df["DateTime"])

# 计算当前行与下一行的时间差(单位:分钟)
next_time_diff = (df["DateTime"].shift(-1) - df["DateTime"]).dt.total_seconds() / 60

# 构建过滤掩码:保留最后一行,或时间差≥15分钟的行
mask = next_time_diff >= 15
mask.iloc[-1] = True  # 强制保留最后一行

# 过滤得到结果
result_df = df[mask]
print(result_df)

注意事项

  • 方案一采用向量化计算,无需循环迭代,适合处理大型DataFrame,效率极高。
  • 若你的实际需求是“保留的行与前一个保留行间隔≥15分钟”(而非仅相邻行),可通过迭代或扩展逻辑实现,但对于超大型数据集,建议优先使用向量化方法优化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:48:22