2016-07-26 23 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