根据多个列值映射值和合并数据帧

时间:2018-01-19 16:42:24

标签: python pandas

我有以下数据框:

df1:带有患者批判性笔记的数据框

AREA                      DATE_TIME                 CRITICAL ISSUE NOTES
0013                      11/6/2017 2:25:00 P.M     Nurse attended to the patient 
1121                      10/23/2017 6:43:00 A.M    Completed an ER
1121                      10/2/2017 9:30:00 P.M     Admitted 

df2:患者其他细节

ZIP                TIME_NOTED   NAME    OCCUPIED    STATE
4568    10/1/2017 10:04:00 A.M  Chris          Y    NORMAL
1121    10/23/2017 6:43:00 A.M  Nancy          Y    CRITICAL
1121    10/2/2017 9:30:00 P.M   Derek          N    CRITICAL

我必须使用DATE_TIME和df1中的AREA代码映射df2中的记录,并保留两个数据帧中的所有其他列。我尝试合并多个列,但没有按预期工作。

new_df = pd.merge(df1, df2,  how='right', left_on=['Date_Time','AREA'], right_on = ['ZIP','TIME_NOTED'])

1 个答案:

答案 0 :(得分:1)

如果你为左/右_(区域/邮编,然后注明日期时间/时间)按相同的顺序排列,它应该有效。我还将合并更改为内部,因此您只需获得具有相同压缩/区域和日期时间/时间的记录。

new_df = pd.merge(df1, df2,  how='inner', left_on = ['AREA','DATE_TIME'], right_on = ['ZIP','TIME_NOTED'])

另一个可能的解决方案是创建一个“ID”列并合并它。

df1['ID'] = df1['AREA'].astype(str) + '_' + df1['DATE_TIME'].astype(str)
df2['ID'] = df2['ZIP'].astype(str) + '_' + df2['TIME_NOTED'].astype(str)

现在合并ID

new_df = pd.merge(df1, df2, how = 'inner',left_on = ['ID'], right_on = ['ID'])

这应该产生相同的表(添加ID列)。