1 回答
TA贡献1802条经验 获得超4个赞
我认为您可以使用 pandas apply函数,它允许您在数据帧的每一行(或列)上运行任意函数。
例如:
def count_missed_apts_before_now(row, df):
subdf = df.query("AppointmentDay<@row.ScheduledDay and `No-show`=='Yes' and PatientId==@row.PatientId")
return len(subdf)
missed_apt_counts = df.apply(count_missed_apts_before_now, axis=1, args = (df,))
在这里,我定义了一个函数count_missed_apts_before_now(),该函数将单行和完整数据帧作为输入。它用于df.query为当前患者制作一个较小的 df,仅包含不显示行,其中 AppointmentDay 早于当前 ScheduledDay 值(“当前”是指 apply 函数正在处理的行的值)。然后我们可以计算向下选择的数据帧的长度并返回它。该apply方法对每一行执行此操作,并将结果组合成一个系列。
注意:apply不一定很快,尽管您可以使用%%timeit魔法将其与 for 循环进行比较。
另外,检查是否需要将 ScheduledDay 时间戳转换为纯日期,因为所有 AppointmentDay 值似乎都只是日期(即全部在 00:00 点),并且在某些情况下,ScheduledDay 在同一天具有较晚的时间戳。
添加回答
举报