Donnerstag, April 9, 2020

„Anti-merge“ in pandas (Python)

Wie bekomme ich Sie heraus, den Unterschied zwischen den Spalten mit dem gleichen Namen in beiden dataframes?
Ich meine, ich habe Ein dataframe mit einer Spalte namens X und dataframe B mit Spalte X, wenn ich pd.merge(A, B, on=['X']), ich werde die gemeinsamen X-Werten von A und B, aber wie bekomme ich die „nicht-common“ sind?

InformationsquelleAutor Polly | 2016-07-07

1 Kommentar

  1. 34

    Wenn Sie ändern Sie die merge-Typ zu how='outer' und indicator=True dies wird eine Spalte hinzuzufügen, Ihnen zu sagen, ob die Werte Links/beide/rechts nur:

    In [2]:
    A = pd.DataFrame({'x':np.arange(5)})
    B = pd.DataFrame({'x':np.arange(3,8)})
    print(A)
    print(B)
       x
    0  0
    1  1
    2  2
    3  3
    4  4
       x
    0  3
    1  4
    2  5
    3  6
    4  7
    
    In [3]:
    pd.merge(A,B, how='outer', indicator=True)
    
    Out[3]:
         x      _merge
    0  0.0   left_only
    1  1.0   left_only
    2  2.0   left_only
    3  3.0        both
    4  4.0        both
    5  5.0  right_only
    6  6.0  right_only
    7  7.0  right_only

    Können Sie dann filter das resultierende zusammengeführte df auf die _merge col:

    In [4]:
    merged = pd.merge(A,B, how='outer', indicator=True)
    merged[merged['_merge'] == 'left_only']
    
    Out[4]:
         x     _merge
    0  0.0  left_only
    1  1.0  left_only
    2  2.0  left_only

    Können Sie auch isin Annulliere die Maske zu finden, die Werte, die nicht in B:

    In [5]:
    A[~A['x'].isin(B['x'])]
    
    Out[5]:
       x
    0  0
    1  1
    2  2

Kostenlose Online-Tests