我在使用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的最准确方法是什么?
答案 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')
对于这种工作方法,需要对键进行排序。