2016-12-26 75 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