gpt4 book ai didi

python - 循环数据帧的更快方法?

转载 作者:行者123 更新时间:2023-12-05 01:50:45 26 4
gpt4 key购买 nike

我很想寻求帮助。我有两个数据框,

df1为患者入院记录

<表类="s-表"><头>patient_keyadmission_dtmadmission_key<正文>P00141765P001-001P00142223P001-002P00142681P001-003P00143139P001-004P00143597P001-005P00144055P001-006

df2为患者的门诊预约记录

<表类="s-表"><头>patient_key<日>appointment_dtm <正文>P00141645P00141687P00141717P00142162P00142193P00142497

我想做的是每次入院前找个门诊预约。例如P001-001入院前,P001有3次门诊就诊。

df2 中的预期结果是这样的:

<表类="s-表"><头>patient_key<日>appointment_dtm admission_key<正文>P00141645P001-001P00141687P001-001P00141717P001-001P00142162P001-002P00142193P001-002P00142497P001-003

我用过这样一个很傻的方法

df2['admission_key'] = ''
for i in df2.index:
for j in df1.index:
if df2.['patient_key'].iloc[i] == df1['patient_key'].iloc[i] and
df2.['appointment_dtm'].iloc[i] > df1['admission_dtm'].iloc[i] and
df2.['appointment_dtm'].iloc[i] < df1['admission_dtm'].iloc[i].shift(-1):
df2['admission_key'] = df1['admission_key']

但是,由于尺寸太大,运行时间非常长。我可以知道有什么更聪明的方法可以做到这一点吗?非常感谢。

最佳答案

这是 merge_asof 的完美用例:

pd.merge_asof(df2, df1, 
by='patient_key',
left_on='appointment_dtm',
right_on='admission_dtm',
direction='forward').drop(columns='admission_dtm')

结果:

<表类="s-表"><头>patient_keyappointment_dtmadmission_key<正文>P00141645P001-001P00141687P001-001P00141717P001-001P00142162P001-002P00142193P001-002P00142497P001-003

关于python - 循环数据帧的更快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72873407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com