如何基于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
相关产品推荐
相关产品推荐

