对比不同长度列:先匹配SESSION_NAME再筛选时间差超1分钟记录
问题解决:匹配会话名后筛选时间差超1分钟的记录
问题描述
我需要找出时间差超过1分钟的记录,但当前代码仅按行直接对比时间。请问如何先匹配SESSION_NAME与SESSION_NAME.1中的相同值,再比较对应TIME的差值?
现有代码
import pandas as pd import warnings warnings.filterwarnings("ignore") df = pd.read_excel('E:/Sesja/Nowy folder/Summary.xlsx') selected_columns = ['SESSION_NAME', 'TIME', 'SESSION_NAME.1', 'TIME.1'] df_subset = df[selected_columns] df_subset['DIFFERENCE'] = (pd.to_datetime(df_subset['TIME'].astype(str)) - pd.to_datetime(df_subset['TIME.1'].astype(str))).dt.total_seconds() / 60 result = df_subset[abs(df_subset['DIFFERENCE']) > 1] print(result)
现有输出结果
SESSION_NAME TIME SESSION_NAME.1 TIME.1 DIFFERENCE 0 AA_KRED 00:41:00 AA_KRED 00:12:00 29.0 1 BB_KRED 01:20:00 BB_KRED 00:17:00 63.0 2 CC_RACH 00:17:00 CC_RACH 00:11:00 6.0 3 BB_RACH 00:11:00 BB_RACH 00:01:00 10.0 4 AA_KRED2 00:01:00 AA_KRED2 00:09:00 -8.0 5 BB_KRED2 00:14:00 BB_KRED2 00:08:00 6.0 6 CC_RACH2 00:12:00 BB_RACH2 00:14:00 -2.0
解决方案
核心是先过滤出会话名匹配的行,再计算时间差并筛选符合条件的记录。修改后的代码如下:
import pandas as pd import warnings warnings.filterwarnings("ignore") df = pd.read_excel('E:/Sesja/Nowy folder/Summary.xlsx') selected_columns = ['SESSION_NAME', 'TIME', 'SESSION_NAME.1', 'TIME.1'] df_subset = df[selected_columns] # 1. 只保留SESSION_NAME和SESSION_NAME.1完全匹配的行 matched_df = df_subset[df_subset['SESSION_NAME'] == df_subset['SESSION_NAME.1']] # 2. 计算时间差,转换为分钟 matched_df['DIFFERENCE'] = (pd.to_datetime(matched_df['TIME'].astype(str)) - pd.to_datetime(matched_df['TIME.1'].astype(str))).dt.total_seconds() / 60 # 3. 筛选时间差绝对值超过1分钟的记录 result = matched_df[abs(matched_df['DIFFERENCE']) > 1] print(result)
代码说明
- 先通过等式判断过滤掉会话名不匹配的行(比如原结果中索引6的
CC_RACH2和BB_RACH2) - 仅对匹配成功的行计算时间差,确保对比的是同一会话的两个时间点
- 最后筛选出时间差绝对值大于1分钟的结果,得到符合需求的记录
内容的提问来源于stack exchange,提问作者Mateusz Plsz
相关产品推荐
相关产品推荐

