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

基于Pandas实现血压测量匹配符合条件的最近心率数据

Pandas匹配最近符合时间条件的心率记录

需求

给定两个Pandas数据表:

  • df_hr:含时间(time)和心率(hr)列,存储心率测量数据
  • df_bp:含时间(time)和收缩压(bp)列,存储血压测量数据

需为每条血压记录匹配早于该血压测量时间、且间隔不超过15分钟的最近一次心率数据。

用户尝试过truncate和iloc方法未成功,示例数据如下:

import pandas as pd
import datetime

df_hr = pd.DataFrame({'time': 
    [datetime.datetime(2022,1,1,7,40), 
     datetime.datetime(2022,1,1,9,50), 
     datetime.datetime(2022,1,1,10,1)],
    'hr':
    [60, 90, 100]}).set_index('time')

df_bp = pd.DataFrame({'time': 
    [datetime.datetime(2022,1,1,10),
     datetime.datetime(2022,1,1,8)],
    'bp': [140, 120]}).set_index('time')

解决方案:使用merge_asof

Pandas的merge_asof方法专门用于按时间戳匹配最近的前序/后序记录,完美适配这个场景。步骤如下:

  1. 将两个表的时间索引转为列(方便合并操作),并按时间排序(merge_asof要求输入表已排序)
  2. 调用merge_asof,设置时间匹配规则和15分钟的间隔限制

完整代码:

import pandas as pd
import datetime

# 示例数据
df_hr = pd.DataFrame({'time': 
    [datetime.datetime(2022,1,1,7,40), 
     datetime.datetime(2022,1,1,9,50), 
     datetime.datetime(2022,1,1,10,1)],
    'hr':
    [60, 90, 100]}).set_index('time')

df_bp = pd.DataFrame({'time': 
    [datetime.datetime(2022,1,1,10),
     datetime.datetime(2022,1,1,8)],
    'bp': [140, 120]}).set_index('time')

# 重置索引为列,并按时间排序
df_hr_sorted = df_hr.reset_index().sort_values('time')
df_bp_sorted = df_bp.reset_index().sort_values('time')

# 使用merge_asof匹配最近的符合条件的心率记录
result = pd.merge_asof(
    df_bp_sorted,
    df_hr_sorted,
    on='time',
    direction='backward',  # 找早于/等于当前时间的最近记录
    tolerance=pd.Timedelta(minutes=15)  # 时间间隔不超过15分钟
)

# 可选:将time重新设为索引
result = result.set_index('time')
print(result)

输出结果

bp    hr
time                         
2022-01-01 08:00:00  120   NaN
2022-01-01 10:00:00  140  90.0

代码解释

  • sort_values('time'):merge_asof要求左右表必须按匹配的时间列排序,否则无法正确找到最近记录
  • direction='backward':指定匹配早于或等于血压时间的最近心率记录
  • tolerance=pd.Timedelta(minutes=15):过滤掉时间间隔超过15分钟的记录,这类记录会显示为NaN
  • 示例中8:00的血压记录,最近的心率是7:40,间隔20分钟超过限制,因此无匹配结果;10:00的血压记录匹配到9:50的心率(间隔10分钟)

内容的提问来源于stack exchange,提问作者R.T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:20:29