使用Pandas计算交替输液状态事件间的时间差
解决方案:计算输液状态事件间的特定时间差
核心思路
只关注状态切换的事件(当前事件状态与上一个不同),计算每个状态切换事件与前一个状态切换事件的时间差,并将差值存入当前事件所在行。完全匹配你需要的逻辑:
- 第一个
STOPPED与第二个RUNNING的时间差存入RUNNING行 - 第二个
RUNNING与第三个STOPPED的时间差存入STOPPED行 - 以此类推
代码实现(基于Pandas)
import pandas as pd # 读取本地CSV数据 df = pd.read_csv('stackoverflow_data.csv') # 将事件时间列转换为datetime类型(必须步骤,否则无法计算时间差) df['event_time'] = pd.to_datetime(df['event_time']) # 标记状态变化的行:当前行状态与上一行不同则为True df['status_change'] = df['infusion_status'] != df['infusion_status'].shift(1) # 筛选出所有状态变化的事件,计算相邻事件的时间差 status_changes = df[df['status_change']] status_changes['time_diff'] = status_changes['event_time'].diff() # 将计算好的时间差映射回原数据的新列 df['target_time_diff'] = df.index.map(status_changes['time_diff'])
代码说明
- 时间格式转换:确保
event_time是datetime类型,这是计算时间差的必要前提。 - 状态变化标记:过滤掉连续相同的状态事件(比如连续的
RUNNING),只保留需要配对的状态切换点。 - 时间差映射:在状态变化序列中,每个事件的
time_diff就是它与前一个不同状态事件的时间间隔,直接映射回原数据即可满足需求。
结果验证
- 第一个
STOPPED之后的RUNNING行,target_time_diff会显示两者的时间差 - 每个状态切换的事件行都会对应到与前一个不同状态事件的时间差,连续相同状态的行则为
NaN(符合需求逻辑)
内容的提问来源于stack exchange,提问作者Karthik Venkatraman
相关产品推荐
相关产品推荐

