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

Python Pandas处理医疗数据集:按Case ID与就诊日期生成就诊编号列

Python: 为同一病例的就诊记录按日期生成就诊编号

嘿,我来帮你搞定这个需求!你需要给每个Case ID#下的就诊记录按日期顺序生成类似Visit 1、Visit 2的编号列,用Pandas就能轻松实现,步骤如下:

第一步:确保日期列是正确的datetime类型

首先得把你的Visit Date列转换成datetime格式,不然字符串排序会出问题(比如"10/1/18"会被排在"2/1/18"前面):

import pandas as pd

# 假设你的DataFrame叫df
df['Visit Date'] = pd.to_datetime(df['Visit Date'])

第二步:分组生成就诊编号

这里有两种实用的方法,你可以根据需求选:

方法一:用cumcount(简单直接)

先按Case ID#和Visit Date排序,确保同一病例的记录按日期顺序排列,然后用cumcount()给每组计数(从0开始,所以加1),最后拼接成需要的格式:

# 先排序,保证顺序正确
df = df.sort_values(['Case ID#', 'Visit Date'])
# 分组计数并生成编号
df['NEW_COL'] = df.groupby('Case ID#').cumcount() + 1
df['NEW_COL'] = 'Visit ' + df['NEW_COL'].astype(str)

方法二:用rank(无需提前排序)

如果不想改变原DataFrame的行顺序,可以用groupby结合transform和rank,直接在原数据上生成编号:

df['NEW_COL'] = df.groupby('Case ID#')['Visit Date'].transform(
    lambda x: 'Visit ' + str(int(x.rank(method='first')))
)

这里的method='first'是为了处理同一天有多条就诊记录的情况——它会按照记录在原数据中的先后顺序给它们编号,避免出现相同的排名。

示例效果

用你给出的样例数据测试:

原始数据:

Visit DateCase ID#
1/1/181111
1/15/181111
1/16/182222

处理后会得到:

Visit DateCase ID#NEW_COL
1/1/181111Visit 1
1/15/181111Visit 2
1/16/182222Visit 1

小提示

  • 如果你的数据中有同一天的多条就诊记录,两种方法都会按顺序给它们分配连续的编号(比如Visit 1、Visit 2)
  • 要是不需要保留原数据的顺序,方法一更高效直观;如果要保持原顺序,方法二更合适

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:49:21