2016-12-26 58 views
3

我有两个大型数据框,我需要合并行。这两个数据帧可能有几个重叠的行。明智的合并数据帧与python/pandas中的重叠数据

例子:

data1 
    key name    patent 
    11 Alphagrep   112344 
    12 Citrix    112345 

data2 
    Sr name    patents 
    11 Alphagrep   112344 
    13 Taj    112322 

我想合并这些dataframes排在[键,SR] &专利,专利有智慧

那就是:如果行数据1 [关键] ==行-data2 [Sr] & row-data1 [专利] == row-data2 [专利],合并或者附加。

的结果应该是:

data1 + data2 
    key name    patent 
    11 Alphagrep   112344 
    12 Citrix    112345 
    13 Taj    112322 

应该如何在一个大熊猫做到这一点?

回答

3

你可以做这样的事情:

print data1, '\n', '\n', data2, '\n' 
data2.columns = data1.columns.tolist() 
data3 = pd.concat([data1, data2]).drop_duplicates() 
print data3 

输出:

key  name patent 
0 11 Alphagrep 112344 
1 12  Citrix 112345 

    Sr  name patents 
0 11 Alphagrep 112344 
1 13  Taj 112322 

    key  name patent 
0 11 Alphagrep 112344 
1 12  Citrix 112345 
1 13  Taj 112322 
+0

这是一个很好的黑客来解决这个问题。但是,假如我们有一个情况,那就是列不能同质化(列数不相等),那么我们将如何工作?有没有我们提供参数的方法,只有那些列被检查 – user248884

+0

@ user248884,你能发布__reproducible__样本数据集和一个期望的结果数据集吗?甚至更好 - 开一个新的问题... – MaxU

+1

是的。创建一个特定的案例并将其作为一个新问题发布。由于此解决方案适用于现有问题,因此您可以接受它:) – MYGz

1

​​和combine_first

c1 = ['key', 'patent'] 
c2 = ['Sr', 'patents'] 

data1.set_index(c1) \ 
    .combine_first(
     data2.set_index(c2).rename_axis(c1) 
    ).reset_index() 

    key patent  name 
0 11 112344 Alphagrep 
1 12 112345  Citrix 
2 13 112322  Taj