在多列上加入DataFrame以获得精确结果

时间:2018-05-07 09:56:42

标签: python pandas dataframe

我在使用pandas dataframes join时遇到了一些问题。这令人沮丧,因为它充满了拼写错误和错误。有两个数据框:客户数据框(cust_df)和信用卡数据框(cc_df)。两个数据帧都包含:其id列,名称,出生日期,国家ID号和手机号码。我想为每个CC_ID(来自ccdf)获取CUST_ID(来自custdf)。通常我们可以做pd.join然后说明关键列;但是在这种情况下,唯一键不准确(其中一些是错误的),这就是为什么需要多列。以下是示例:
cust_df的示例数据:

CUST_ID , NAME  ,  DOB, NTLNO   , MOBILE  
231412 ,W CUMI  , 17/02/1989 00:00    , 952547890   ,85320818335  
123433 ,S KAMU W  , 28/04/1989 00:00    , 444466213  ,81217354673  
324123 ,K D SUMI    , 05/01/1983 00:00    , 677676999   ,82938489231  
324123 ,M SAMI    , 17/02/1989 00:00    , 657567577  , 81217354674  
231432 ,MOSE N  , 17/02/1989 00:00    , 123423355   ,83320818575  

cc_df的示例数据:

CC_ID , FNAME,MNAME,LNAME,DOB,NTLNO,MOBILE  
1234    , MOSE,    NAMU,        ,17/02/1989 00:00 ,   123423355,   83320818575  
2345    , MAWON,       ,SAMI,    17/02/1989 00:00,    657567577,   81217354674  
3243    , KOME,    DODO,    SUMI,    05/01/1983 00:00,    76999,   82938489331  
4365    , SAPI,    KAMU,    WEWE ,   28/04/1989 00:00 ,   444466213,   81217354673  
4534    , WAKU,    CUMI,        ,17/02/1989 00:00 ,   52547890,    85320818335  

问题是:
 1.名称,在cc_df中,名称是分开的,而cust_df名称是连接的,有时是短的形式。示例:Sumi Cumi - > S Cumi。
 2. NTLNO&移动 NTLNO& MOBILE是唯一标识符,但由于输入错误,其中一些是错误的。

获取每个CC_ID的CUST_ID的最准确方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用merge_asof

cust_df.sort_values(by='MOBILE', inplace=True)
cc_df.sort_values(by='MOBILE', inplace=True)

pandas.merge_asof(cc_df, cust_df, on='MOBILE', direction='nearest')

对于这种工作方法,需要对键进行排序。