【问题标题】:Join two larger dataframes into smaller multindex dataframe according to matching row numbers?根据匹配的行号将两个大数据帧加入较小的多索引数据帧?
【发布时间】:2020-08-17 04:20:16
【问题描述】:

我正在使用 recordlinkage 来查找两个大小不等的数据帧之间的匹配项,它输出一个多索引数据帧(特征),其中包含第一个索引(左)中 df_a 中匹配项的相应行号,第二个索引中 df_b 也是如此(正确的)。我只想合并 df_a 和 df_b 中正确索引处的匹配项,如下所示:

df_a

      col_a col_b col_c
a           
b
c
d
e

df_b

      col_1 col_2 col_3
1           
2
3
4
5
6
7
8
9
10

功能

                match
   left  right 
    a     2      
          3
    b     7
          8
          9

结束 合并2

               match col_a col_b col_c col_1 col_2 col_3
   left  right 
    a     2      
          3
    b     7
          8
          9

这是相关的sn-p:

for i in range(0,in_a_lines,chunks):
    if i < in_a_lines - chunks:
          df_a_subset = df_a.iloc[i:i+chunks]
    else:
          df_a_subset = df_a.iloc[i:in_a_lines]

    indexer = recordlinkage.Index()
    indexer.block(left_on = [comp_left], right_on = [comp_right])
    pairs_subset = indexer.index(df_a_subset, df_b)

    comp = recordlinkage.Compare()
    comp.string(left_on = comp_left, right_on = comp_right, method='jarowinkler', threshold = 0.85)
    features = comp.compute(pairs_subset, df_a_subset, df_b).rename_axis(['left', 'right'])
    
    print(str(i+chunks)+"/"+str(in_a_lines)+"\nPotential matches: "+str(len(features)))


    merge1 = df_b.join(features, on=['right'])
    merge2 = df_a_subset.join(merge1, on = ['left'])
  
    merge2.to_csv(out_csv,
          header = None,
          index = None,
          mode='a',
          chunksize=chunks)                         

【问题讨论】:

  • 为什么左1匹配右2和4?
  • recordlinkage.Compare() 采用两个单索引数据帧并找到部分字符串匹配,输出一个多索引数据帧,索引由它在这两者之间找到匹配的位置确定。在这种情况下,这意味着 df_a 第 1 行的条目与 df_b 第 2 行和第 4 行的条目匹配。我将对其进行编辑以更清楚地说明这是两个单独的索引。

标签: python pandas dataframe


【解决方案1】:

我只是把顺序搞混了,左边的数据框需要调用join:

merge1 = features.join(df_a_subset, on='left', how = 'inner')
merge2 = merge1.join(df_b, on='right', how = 'inner')

如果要删除包含记录链接匹配条件的行,请添加

merge2 = merge2.drop(merge2.columns[[0,1]], axis=1)

【讨论】:

    猜你喜欢
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    相关资源
    最近更新 更多