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

基于分组比较DataFrame创建列:判断最值时间差是否在±2秒内

解决分组后A、B最大值时间差的判断问题

看起来你已经完成了最关键的一步——拿到每组A、B最大值对应的行,接下来咱们就可以轻松完成时间差的判断啦,步骤如下:

  • 第一步:合并两个结果DataFrame
    因为idxmaxA和idxmaxB都是按SeqNum分组后的结果,咱们用SeqNum作为关联键,把它们合并到同一个DataFrame里,这样方便后续对比时间。为了避免列名重复,这里有两种实用方式:
# 方式一:合并时给重复列加后缀
merged = pd.merge(idxmaxA, idxmaxB, on='SeqNum', suffixes=('_A', '_B'))

# 方式二:先重命名关键列再合并,可读性更强
idxmaxA = idxmaxA.rename(columns={'TimeHrs': 'TimeA', 'A': 'MaxA'})
idxmaxB = idxmaxB.rename(columns={'TimeHrs': 'TimeB', 'B': 'MaxB'})
merged = pd.merge(idxmaxA, idxmaxB, on='SeqNum')

合并后,每一行就对应一个SeqNum组,同时包含A最大值的时间、A的峰值,以及B最大值的时间、B的峰值。

  • 第二步:确保时间列是可计算的datetime类型
    如果你的TimeHrs列还不是datetime格式,得先转换成时间类型,不然没法计算时间差:
merged['TimeA'] = pd.to_datetime(merged['TimeA'])
merged['TimeB'] = pd.to_datetime(merged['TimeB'])
  • 第三步:计算时间差并判断是否在±2秒范围内
    用dt.total_seconds()把时间差转换成秒数,取绝对值后和2比较,直接生成一个布尔结果列:
merged['Within2Sec'] = abs((merged['TimeA'] - merged['TimeB']).dt.total_seconds()) <= 2

这个Within2Sec列里,True就表示该组A、B最大值的时间差在±2秒内,False则超出了范围。

  • 可选:查看或筛选结果
    你可以直接查看所有组的判断结果,或者针对性筛选:
# 查看核心判断结果
print(merged[['SeqNum', 'TimeA', 'TimeB', 'Within2Sec']])

# 筛选出时间差超出2秒的组
out_of_range_groups = merged[merged['Within2Sec'] == False]
print(out_of_range_groups)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:33:40