2016-07-26 79 views
-1

这似乎应该很容易,但我似乎无法找到我在找什么...我有两个人名单,名字,姓氏,出生日期,我只想知道哪些人在这两个列表中,哪一个在一个列表中,而不在另一个列表中。像基于姓名和出生日期的匹配列表

common = pd.merge(list1, list2, how='left', left_on=['Last', 'First', 'DOB'], right_on=['Patient Last Name', 'Patient First Name', 'Date of Birth']).dropna() 

我已经试过一些基于别的东西,我在网上找到的,但它给我这个错误:

KeyError: 'Date of Birth' 

我已验证这确实是列标题在第二个列表中,所以我没有得到什么错误。任何人都这样匹配?什么是最简单/最快的方式?列表之间的名称可能有不同的格式,如“史密斯琼斯”与“史密斯琼斯”与“史密斯琼斯”,但我通过从名称中剥离所有的间谍和标点符号来解决这个问题......我认为这是第一个好的步?

+0

查找到集工会和分歧。 – adeora

回答

0

试试这个,它应该工作

import sys 
from StringIO import StringIO 


import pandas as pd 

TESTDATA=StringIO("""DOB;First;Last 
    2016-07-26;John;smith 
    2016-07-27;Mathew;George 
    2016-07-28;Aryan;Singh 
    2016-07-29;Ella;Gayau 
    """) 

list1 = pd.read_csv(TESTDATA, sep=";") 

TESTDATA=StringIO("""Date of Birth;Patient First Name;Patient Last Name 
    2016-07-26;John;smith 
    2016-07-27;Mathew;XXX 
    2016-07-28;Aryan;Singh 
    2016-07-20;Ella;Gayau 
    """) 


list2 = pd.read_csv(TESTDATA, sep=";") 

print list2 
print list1 

common = pd.merge(list1, list2, how='left', left_on=['Last', 'First', 'DOB'], right_on=['Patient Last Name', 'Patient First Name', 'Date of Birth']).dropna() 
print common 
+0

也为了得到那些缺少按照这里提到的代码http://stackoverflow.com/questions/23284409/how-to-subtract-rows-of-one-pandas-data-frame-from-another – Shijo