匹配两个数据框中的两列,如果单元格匹配

时间:2018-04-18 02:40:44

标签: python-2.7 pandas dataframe linguistics

我有两个带有语言数据的pandas数据帧,oset包含完整数据,miscset是完整数据的子集。我正在寻找一种方法来比较两个列与来自两个不同数据帧的字符串,并确定那些匹配的行。然后,我想将oset第三个​​列复制到miscset,以查找匹配的列。例如:

oset = pd.DataFrame({'some_items' : ['book', 'cat', 'deer', 'egg'], 
                     'root' : ['boks', 'kattuz', 'deuza', 'ajja']})
miscset = pd.DataFrame({'subset' : ['cat', 'egg']})

我希望匹配categg,因为它们已共享,然后在root中创建一个包含miscset的新列kattuz,当然,ajja在适当的行上。

我从这开始:

for row in miscset['subset']:
    if row.isin(oset['some_items']):

但是我已经遇到了问题,因为你不能将.isin与字符串一起使用。

有没有人有任何建议我可以做什么或如何继续?

编辑:我或许应该在我的真实数据集中添加,我总体上有更多列我不希望传输,或者我希望保留,所以我只想添加使用miscsetroot列中相应的行向oset的第5列。

2 个答案:

答案 0 :(得分:1)

选项1:合并

miscset = miscset.merge(oset, left_on='subset', right_on='some_items', 
    how='inner').drop(columns='some_items')
#  subset    root
#0    cat  kattuz
#1    egg    ajja

您可以根据您希望如何处理oset

中没有匹配或多个匹配的情况来更改合并

答案 1 :(得分:1)

使用map

miscset.assign(root=miscset['subset'].map(oset.set_index('some_items')['root']))

  subset    root
0    cat  kattuz
1    egg    ajja