2016-12-23 190 views
1

我是熊貓新手,所以如果我聽起來太天真了,請原諒。我有兩個dataframes DF1和DF2,熊貓數據框在條件分裂

df1 = pd.DataFrame({'key1': ['K0', 'K1', 'K2', 'K3'], 
       'key2': ['K5', 'K4', 'K5', 'K4']}) 

df2 = pd.DataFrame({'key1': ['K0', 'K1', 'K2', 'K3', 'K9', 'K8', 'K7'], 
        'key2': ['K5', 'K6', 'K5', 'K4', 'K6', 'K4', 'K5'], 
        'A':['1', '2', '3', '4', '5', '6', '7'], 
        'B':['8', '9', '10', '11', '12', '13', '14']}) 

我想對DF1合併DF2像

final = df1.merge(df2, on=['key1', 'key2'], how='left') 

,然後在DF2剩下的值作爲一個數據幀。

任何幫助,將不勝感激。謝謝。

回答

0

IIUC需要外連接與參數indicator,然後通過boolean indexing分裂:

final = df1.merge(df2, how='outer', indicator=True) 
print (final) 
    key1 key2 A B  _merge 
0 K0 K5 1 8  both 
1 K1 K4 NaN NaN left_only 
2 K2 K5 3 10  both 
3 K3 K4 4 11  both 
4 K1 K6 2 9 right_only 
5 K9 K6 5 12 right_only 
6 K8 K4 6 13 right_only 
7 K7 K5 7 14 right_only 

print (final[final._merge == 'right_only']) 
    key1 key2 A B  _merge 
4 K1 K6 2 9 right_only 
5 K9 K6 5 12 right_only 
6 K8 K4 6 13 right_only 
7 K7 K5 7 14 right_only 

print (final[final._merge != 'right_only']) 
    key1 key2 A B  _merge 
0 K0 K5 1 8  both 
1 K1 K4 NaN NaN left_only 
2 K2 K5 3 10  both 
3 K3 K4 4 11  both 

print (final[final._merge == 'right_only'].drop('_merge', axis=1)) 
    key1 key2 A B 
4 K1 K6 2 9 
5 K9 K6 5 12 
6 K8 K4 6 13 
7 K7 K5 7 14 

print (final[final._merge != 'right_only'].drop('_merge', axis=1)) 
    key1 key2 A B 
0 K0 K5 1 8 
1 K1 K4 NaN NaN 
2 K2 K5 3 10 
3 K3 K4 4 11 
+0

如果輸出是不同的,因爲你需要,你可以編輯的問題,並添加所需的輸出?謝謝。 – jezrael

+0

這完美地回答了我的問題。非常感謝,我忽略了指標旗的重要性。 –