1 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
我認(rèn)為您可以使用 pandas apply函數(shù),它允許您在數(shù)據(jù)幀的每一行(或列)上運(yùn)行任意函數(shù)。
例如:
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,))
在這里,我定義了一個(gè)函數(shù)count_missed_apts_before_now(),該函數(shù)將單行和完整數(shù)據(jù)幀作為輸入。它用于df.query為當(dāng)前患者制作一個(gè)較小的 df,僅包含不顯示行,其中 AppointmentDay 早于當(dāng)前 ScheduledDay 值(“當(dāng)前”是指 apply 函數(shù)正在處理的行的值)。然后我們可以計(jì)算向下選擇的數(shù)據(jù)幀的長(zhǎng)度并返回它。該apply方法對(duì)每一行執(zhí)行此操作,并將結(jié)果組合成一個(gè)系列。
注意:apply不一定很快,盡管您可以使用%%timeit魔法將其與 for 循環(huán)進(jìn)行比較。
另外,檢查是否需要將 ScheduledDay 時(shí)間戳轉(zhuǎn)換為純?nèi)掌?,因?yàn)樗?AppointmentDay 值似乎都只是日期(即全部在 00:00 點(diǎn)),并且在某些情況下,ScheduledDay 在同一天具有較晚的時(shí)間戳。
添加回答
舉報(bào)