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

如何用Python Pandas按月合并患者数据并保留最新非空值

用Pandas按月份合并患者数据并保留每月最新非空值

实现步骤与代码示例

假设你的患者数据包含Patient ID(患者ID)、日期及各类临床指标列,且已按日期升序排列。以下是具体实现方法:

  1. 导入依赖并加载数据
import pandas as pd

# 加载你的数据(示例为CSV格式,可根据实际调整)
df = pd.read_csv('patient_records.csv')
  1. 转换日期列为datetime类型
    确保Pandas能正确识别日期字段,为后续分组做准备:
df['日期'] = pd.to_datetime(df['日期'])
  1. 创建年月分组键
    提取日期中的年月信息,作为分组的依据:
df['年月'] = df['日期'].dt.to_period('M')  # 生成如"2023-01"的年月对象
  1. 分组聚合,保留每月最新非空值
    自定义函数提取每个分组内每列的最后一个非空值(即该月内最新的有效数据),再按患者ID+年月分组聚合:
def get_last_valid_value(series):
    # 筛选非空值,若存在则取最后一个(对应最新记录),否则返回空值
    valid_values = series.dropna()
    return valid_values.iloc[-1] if not valid_values.empty else pd.NA

# 按患者ID和年月分组,应用自定义函数聚合
merged_df = df.groupby(['Patient ID', '年月']).agg(get_last_valid_value).reset_index()
  1. 可选:将年月转换为日期格式
    如果需要将年月列转换为具体日期(如每月最后一天),可执行:
merged_df['年月'] = merged_df['年月'].dt.to_timestamp(how='end')

关键逻辑说明

  • 分组依据:通过Patient ID+年月确保每个患者每月仅保留一条合并记录。
  • 聚合逻辑:get_last_valid_value函数针对每列,只保留该月内最后出现的非空值,完全匹配你需要的"最新非空"要求。
  • 原始数据排序:因为你的数据已按日期升序排列,所以分组内的最后一个非空值就是该月的最新有效数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:50:14