2个数据帧之间的字符串匹配

时间:2018-07-20 07:43:07

标签: python

在此处学习Python,对此深有帮助。 我的问题场景是,有两个数据框 A B 包含“名称”列(名称和标志)列表。

ExDF = pd.DataFrame({'Name' : ['Smith','John, Alex','Peter Lin','Carl Marx','Abhraham Moray','Calvin Klein'], 'Flag':['False','False','False','False','False','False']})

SnDF = pd.DataFrame({'Name' : ['Adam K ','John Smith','Peter Lin','Carl Josh','Abhraham Moray','Tim Klein'], 'Flag':['False','False','False','False','False','False']})

Flag的初始值为False。

要点1:我需要翻转两个数据框中的名称,即亚当·史密斯(Adam Smith)和史密斯·亚当(Smith Adam),并将翻转名称保存在两个数据框中的另一个新列中。       -这部分完成了。

要点2:然后, A数据框的原始名称和翻转名称都应签入 B数据框的原始名称和翻转名称。如果在两个数据框中都找到了flag列,则应通过True更新。

我编写了代码,但它同时检查了两个数据帧,如A[0]B[0]A[1]B[1],但我需要检查{{1 }}记录到B数据帧的所有记录。

请帮助我!!

尝试的代码如下:

A[0]

1 个答案:

答案 0 :(得分:0)

您可以尝试isin()-大熊猫:

import pandas as pd

ExDF = pd.DataFrame({'Name' : ['Smith','John, Alex','Peter Lin','Carl Marx','Abhraham Moray','Calvin Klein'], 'Flag':['False','False','False','False','False','False']})
SnDF = pd.DataFrame({'Name' : ['Adam K ','John Smith','Peter Lin','Carl Josh','Abhraham Moray','Tim Klein'], 'Flag':['False','False','False','False','False','False']})

print(ExDF)
print(SnDF)

ExDF["Swap"] = ExDF["Name"].apply(lambda x: " ".join(reversed(x.split())))
SnDF["Swap"] = SnDF["Name"].apply(lambda x: " ".join(reversed(x.split())))

print(ExDF)
print(SnDF)

ExDF['Flag'] = ExDF.Name.isin(SnDF.Name)
SnDF['Flag'] = SnDF.Name.isin(ExDF.Name)

print(ExDF)
print(SnDF)