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

将DataFrame的Rank值转置为新列:提取患者第1、4次就诊记录

解决方法

首先修正你生成排名列的代码,原代码存在括号嵌套错误,正确的排名逻辑应该是先按patientid和encounter排序,再分组对encounter排名:

# 修正Rank列的生成逻辑
PHQ['Rank'] = PHQ.sort_values(['patientid', 'encounter']) \
                 .groupby(['patientid'])['encounter'] \
                 .rank(method='min').astype(int)

接下来通过筛选+转置得到你要的结果:

  1. 先筛选出排名为1和4的就诊记录
  2. 使用pivot将排名转成列,并重命名为目标列名
  3. 重置索引确保patientid作为普通列存在

完整代码如下:

# 筛选第1和第4次就诊记录
filtered = PHQ[PHQ['Rank'].isin([1, 4])]

# 转置数据,将Rank转为列,替换`check_value`为你实际存储就诊检查结果的字段名
result = filtered.pivot(
    index='patientid',
    columns='Rank',
    values='check_value'
).rename(columns={1: 'phq1_check', 4: 'phq4_check'}).reset_index()

# 可选:处理无第4次就诊的患者空值
result = result.fillna({'phq4_check': None})

额外优化

如果你的encounter字段本身就是按就诊顺序编号的(比如直接是1、2、3...),可以跳过生成Rank列的步骤,直接筛选转置,效率更高:

filtered = PHQ[PHQ['encounter'].isin([1, 4])]
result = filtered.pivot(index='patientid', columns='encounter', values='check_value') \
                 .rename(columns={1: 'phq1_check', 4: 'phq4_check'}).reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:30:38