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

如何用Pandas生成符合时间条件的心率血压关联数据表?

为血压测量数据匹配符合条件的最近心率数据

核心思路

用Pandas的merge_asof方法可以直接解决这个需求——它专门用于按时间戳匹配最近的、早于目标时间且在指定时间范围内的记录,比手动用join/merge更高效准确。

步骤与代码示例

1. 准备数据并格式化时间列

首先确保两个数据表的time列是datetime类型,并且按时间排序(merge_asof要求输入表必须按时间列排序):

import pandas as pd

# 示例心率数据
hr_data = pd.DataFrame({
    'time': ['2024-05-20 08:00:00', '2024-05-20 08:10:00', '2024-05-20 08:25:00'],
    'heart rate': [72, 75, 78]
})

# 示例血压数据
bp_data = pd.DataFrame({
    'time': ['2024-05-20 08:12:00', '2024-05-20 08:20:00', '2024-05-20 08:30:00'],
    'systolic pressure': [120, 125, 118]
})

# 转换time列为datetime类型
hr_data['time'] = pd.to_datetime(hr_data['time'])
bp_data['time'] = pd.to_datetime(bp_data['time'])

# 按时间排序(merge_asof要求必须排序)
hr_data = hr_data.sort_values('time').reset_index(drop=True)
bp_data = bp_data.sort_values('time').reset_index(drop=True)

2. 执行时间匹配

使用merge_asof设置匹配规则:

  • left:血压数据表(要匹配的目标表)
  • right:心率数据表(提供匹配源)
  • on='time':按time列匹配
  • direction='backward':找早于血压时间的最近心率记录
  • tolerance=pd.Timedelta('15 minutes'):仅匹配时间间隔≤15分钟的记录
# 执行匹配
result = pd.merge_asof(
    bp_data,
    hr_data,
    on='time',
    direction='backward',
    tolerance=pd.Timedelta('15 minutes')
)

# 查看结果
print(result)

3. 结果说明

运行后会得到符合要求的表:

  • 每行血压数据对应最近的、时间早于它且间隔不超15分钟的心率数据
  • 如果没有符合条件的心率记录,对应heart rate列会显示NaN

关键参数解释

  • direction='backward':固定找目标时间之前的最近记录,对应需求里的「心率测量时间早于血压时间」
  • tolerance:严格限制时间间隔,过滤掉超过15分钟的历史记录
  • 必须先排序:merge_asof依赖有序的时间列才能高效匹配,否则会报错或得到错误结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:50:44