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

如何用Pandas计算每位患者各疗程的间隔天数?

解决患者疗程间天数差计算问题

步骤说明

要实现按患者分组计算相邻疗程的天数间隔,核心是按患者分组后对日期做滞后差值计算,具体步骤如下:

  1. 转换日期格式:先将字符串类型的date列转为pandas的datetime格式,否则无法进行日期运算。
  2. 分组计算日期差:以patient为分组键,对转换后的日期列使用diff()方法,该方法会自动计算当前行与前一行的日期差,新患者的第一行结果为NaN。
  3. 处理初始值:将每个患者的第一个疗程差值替换为0(或保留NaN,根据需求调整),最后将差值转为整数类型。

完整代码实现

import pandas as pd

# 原始数据集
df2 = pd.DataFrame({
    'patient': ['one', 'one', 'one', 'two','two', 'two'],    
    'treatment_schedule': ['treatment1', 'treatment2', 'treatment3', 'treatment1', 'treatment2', 'treatment3'],        
    'date': ['11/20/2022', '11/22/2022', '11/23/2022', '11/8/2022', '11/9/2022', '11/14/2022']
})

# 1. 转换日期列格式
df2['date'] = pd.to_datetime(df2['date'], format='%m/%d/%Y')

# 2. 分组计算日期差,填充初始值为0
df2['lag_diff_days_between_each_treatment'] = df2.groupby('patient')['date'].diff().dt.days.fillna(0).astype(int)

# 查看结果
print(df2)

输出结果

运行代码后得到的数据集与期望的df3完全一致:

patient treatment_schedule       date  lag_diff_days_between_each_treatment
0     one         treatment1 2022-11-20                                      0
1     one         treatment2 2022-11-22                                      2
2     one         treatment3 2022-11-23                                      1
3     two         treatment1 2022-11-08                                      0
4     two         treatment2 2022-11-09                                      1
5     two         treatment3 2022-11-14                                      5

补充说明

  • 若希望第一个疗程的差值显示为NaN而非0,只需去掉.fillna(0)即可。
  • 确保疗程记录是按时间顺序排列的,如果原始数据存在乱序,需要先对每个患者的date列排序:df2 = df2.sort_values(by=['patient', 'date']).reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:35:30