2016-05-16 15 views
2

Ich habe diesen 2-Datenrahmen:Entfernen Schnittstelle zwischen Datenrahmen basierend auf mehreren Spalten

df_test 
    dimension1_id dimension2_id dimension3_id dimension4_id dimension5_id \ 
0   -1   -1   -1   -1   -1 
1 1177314888  238198786 5770904146  133207291   Exact 
2 1177314888  238198786 5770904266 18395155770   Exact 
3 1177314888  238198786 5770904266 19338210057   Exact 
4 1177314888  238198786 5770904266 30907903234   Exact 

und

df_merge 
dimension1_id dimension2_id dimension3_id dimension4_id dimension5_id \ 
0   -1   -1   -1   -1   -1 
1 1177314888  238198786 5770904146  133207291   Exact 

ich alles entfernen möge, das in df_merge von df_test ist, basierend auf den Kombinationen von dimension1_id, dimension2_id, dimension3_id, dimension4_id und dimension5_id.

Dies ist mein Code:

df_test = df_test[ 
(df_test['dimension5_id'].isin(df_merge.dimension5_id) == False) & 
(df_test['dimension4_id'].isin(df_merge.dimension4_id) == False) &        (df_test['dimension3_id'].isin(df_merge.dimension3_id) == False) &        (df_test['dimension2_id'].isin(df_merge.dimension2_id) == False) & 
(df_test['dimension1_id'].isin(df_merge.dimension1_id) == False) 
] 

Aber dieser Code gibt einen leeren Datenrahmen. Wie kann ich nur die erste und zweite Zeile von df_test entfernen?

Antwort

4

Sie können die logische Indexierung verwenden, um die gewünschten Zeilen durch einen direkten Vergleich zu maskieren.

df_test.isin(df_merge) 

Der resultierende logische Index dient als Maske:

dimension1_id dimension2_id dimension3_id dimension4_id dimension5_id  \ 
0   True   True   True   True   True True 
1   True   True   True   True   True True 
2   False   False   False   False   False False 
3   False   False   False   False   False False 
4   False   False   False   False   False False 

True Werte abbilden, um passende Zeilen so können wir einfach negieren In diesem Fall können Sie für Werte in df_test die in df_merge sind prüfen Rückkehr der Index ~ mit nur die Zeilen, die Sie in df_merge welche nicht df_test:

df_test[~df_test.isin(df_merge)] 
Verwandte Themen