将两个数据框的两列进行匹配,如果匹配成功,则添加第三列中的项目。

4

我有两个带有语言学数据的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,因为它们是共享的,然后在miscset中创建一个新列root,该列包含适当行中的kattuzajja

我从这个开始:

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

但是我在这里已经遇到了一个问题,因为您无法使用.isin来处理字符串。

有人有什么建议可以代替或如何继续吗?

编辑:我应该补充说明的是,在我的实际数据集中,整体上有更多的列,我不希望转移,或者我希望保留,所以我只想添加第五列到miscset,并使用从osetroot列中适当的行。

2个回答

2

选项一:合并

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
使用 map
miscset.assign(root=miscset['subset'].map(oset.set_index('some_items')['root']))

  subset    root
0    cat  kattuz
1    egg    ajja

谢谢!在尝试在我的真实数据集上运行时,我遇到了错误“仅对具有唯一值索引对象进行重新索引”。这可能是什么原因? - Coedwig
这意味着你没有给我足够的信息。你提供的样本数据不足以展示你想要做什么。 - piRSquared
你如何将此扩展到映射两个列,然后在前两个匹配时添加第三个? - abra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接