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

如何对比DataFrame时间戳列并按规则删除不符合条件的行?

解决方法

要删除不符合时间顺序的DataFrame条目,核心是先将时间字符串转为可比较的时间类型,再通过条件筛选保留合规行,具体操作如下:

1. 准备环境与数据

先导入pandas并定义你的原始DataFrame:

import pandas as pd

data = {
    'Instance': ['a', 'a', 'f', 'f'],
    'sort_begin': ['04:19:07', '04:19:07', '05:19:07', '04:19:17'],
    'cop_begin': ['04:31:56', '02:34:22', '02:31:26', '04:35:56'],
    'ded_begin': ['04:32:32', '02:34:22', '04:32:32', '04:34:35']
}
df1 = pd.DataFrame(data)

2. 转换时间列类型

原始时间是H:M:S格式的字符串,无法直接比较大小,需要转为pandas可识别的时间类型:

# 转换为时间类型,仅保留时分秒部分
df1['sort_begin'] = pd.to_datetime(df1['sort_begin'], format='%H:%M:%S').dt.time
df1['cop_begin'] = pd.to_datetime(df1['cop_begin'], format='%H:%M:%S').dt.time
df1['ded_begin'] = pd.to_datetime(df1['ded_begin'], format='%H:%M:%S').dt.time

3. 筛选合规行

根据规则cop_begin > sort_begin且ded_begin > cop_begin过滤数据:

filtered_df = df1[(df1['cop_begin'] > df1['sort_begin']) & (df1['ded_begin'] > df1['cop_begin'])]

最终结果

执行后得到的filtered_df即为符合要求的数据集:

Instance sort_begin cop_begin ded_begin
0        a   04:19:07  04:31:56  04:32:32

注:你提供的期望输出中最后一行ded_begin为04:37:35,但原始数据中该行的ded_begin是04:34:35(早于cop_begin的04:35:56),不符合规则会被过滤;若为输入笔误,修正原始数据后该行可被保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:32:16