如何用Pandas按Key分组计算readmit列:首次出院日与入院日间隔天数
解决方案
核心思路
按Key分组提取每组的首次出院日期(discharge最小值),将该日期与每条记录的入院日期(admit)做差值计算,得到间隔天数。
步骤与代码
确保日期列是datetime类型
若你的日期还未转换为datetime格式,先执行以下代码:import pandas as pd # 假设你的DataFrame名为df,列包含Key、admit、discharge df['admit'] = pd.to_datetime(df['admit']) df['discharge'] = pd.to_datetime(df['discharge'])提取每组的首次出院日期并合并回原表
# 按Key分组,获取每组最早的discharge日期 first_discharge = df.groupby('Key')['discharge'].min().reset_index(name='first_discharge') # 将首次出院日期合并到原DataFrame中 df = df.merge(first_discharge, on='Key', how='left')计算间隔天数并生成readmit列
# 计算admit日期与首次discharge的天数差,结果为整数天数 df['readmit'] = (df['admit'] - df['first_discharge']).dt.days若需要间隔的绝对值(忽略正负,只看天数差),可修改为:
df['readmit'] = abs(df['admit'] - df['first_discharge']).dt.days
示例验证
假设原始数据:
| Key | admit | discharge |
|---|---|---|
| A | 2023-01-01 | 2023-01-05 |
| A | 2023-01-07 | 2023-01-10 |
| B | 2023-02-01 | 2023-02-03 |
| B | 2023-02-05 | 2023-02-08 |
执行代码后得到的结果:
| Key | admit | discharge | first_discharge | readmit |
|---|---|---|---|---|
| A | 2023-01-01 | 2023-01-05 | 2023-01-05 | -4 |
| A | 2023-01-07 | 2023-01-10 | 2023-01-05 | 2 |
| B | 2023-02-01 | 2023-02-03 | 2023-02-03 | -2 |
| B | 2023-02-05 | 2023-02-08 | 2023-02-03 | 2 |
常见问题排查
- 若之前代码失败,大概率是日期未转换为datetime类型,导致无法计算差值;
- 若分组后首次出院日期提取错误,检查
groupby的键是否正确,以及是否用min()获取最早日期。
内容的提问来源于stack exchange,提问作者J PBro
相关产品推荐
相关产品推荐

