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

