这似乎应该很容易,但我似乎无法找到我正在寻找的东西......我有两个人名单,FirstName,LastName,出生日期,我只是想知道哪些人在两个名单中,哪些人在一个而不是另一个。
我尝试过像
这样的事情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'
我已经确认这确实是第二个列表中的列标题,所以我没有弄错。有人像这样匹配吗?什么是最简单/最快的方式?列表之间的名称可能有不同的格式,例如" Smith-Jones" vs." SmithJones"与#Smith;史密斯琼斯",但我通过从名字中删除所有的spance和标点来解决这个问题...我认为这是第一个好的一步?
答案 0 :(得分: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