【问题标题】:Match two columns from two dataframes and add items from a third column if cells match匹配两个数据框中的两列,如果单元格匹配,则从第三列添加项目
【发布时间】:2018-04-18 02:40:43
【问题描述】:

我有两个带有语言数据的 pandas 数据框,oset 带有完整数据,miscset 是完整数据的子集。我正在寻找一种将两列与来自两个不同数据帧的字符串进行比较的方法,并识别那些匹配的行。然后我想将 third 列从 oset 复制到 miscset 以获取匹配的那些列。例如:

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

然后我想匹配cat和egg,因为它们是共享的,然后在miscset中创建一个新列root,其中当然包含kattuz和ajja在适当的行上。

我是从这个开始的:

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

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

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

编辑:我或许应该补充一点,在我的真实数据集中,总体上我不想转移或希望保留更多的列,所以我只想添加使用oset 中root 列中的适当行将第5 列添加到miscset。

【问题讨论】:

    标签: python-2.7 pandas dataframe linguistics


    【解决方案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 中没有匹配或多个匹配的情况来更改合并

    【讨论】:

      【解决方案2】:

      使用map

      miscset.assign(root=miscset['subset'].map(oset.set_index('some_items')['root']))
      
        subset    root
      0    cat  kattuz
      1    egg    ajja
      

      【讨论】:

      • 谢谢!在我的真实数据集上尝试这个时,我得到了错误Reindexing only valid with uniquely valued Index objects。什么可能导致这种情况?
      • 这意味着你没有给我足够的信息。您提供的示例数据不足以证明您正在尝试做什么。
      • 如何将其扩展为映射 两个 列,然后在前两个匹配时添加第三个?
      猜你喜欢
      • 1970-01-01
      • 2016-08-25
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多