2014-11-14 15 views
12

Angenommen, ich habe zwei Datenrahmen wie so:Pandas - Kreuzung von zwei Datenrahmen basierend auf Spalteneinträge

>>dfA 
      S      T   prob 
0  ! ! !    ! ! ! ! 8.1623999e-05 
1  ! ! !    ! ! ! " 0.00354090007 
2  ! ! !    ! ! ! . 0.00210241997 
3  ! ! !    ! ! ! ? 6.55684998e-05 
4  ! ! !     ! ! !  0.203119993 
5  ! ! !    ! ! ! ” 6.62070015e-05 
6  ! ! !     ! ! 0.00481862016 
7  ! ! !      ! 0.0274260994 
8  ! ! !    " ! ! ! 7.99940026e-05 
9  ! ! !     " ! 1.51188997e-05 
10  ! ! !      " 8.50678989e-05 

>>dfB 
      S      T         knstats 
0  ! ! !    ! ! ! !     knstats=2,391,104,64,25 
1  ! ! !    ! ! ! "     knstats=4,391,6,64,2 
2  ! ! !    ! ! ! .     knstats=4,391,5,64,2 
3  ! ! !    ! ! ! ?     knstats=1,391,4,64,4 
4  ! ! !     ! ! !    knstats=220,391,303,64,55 
5  ! ! !     ! !    knstats=16,391,957,64,115 
6  ! ! !      !    knstats=28,391,5659,64,932 
7  ! ! !    " ! ! !     knstats=2,391,2,64,1 
8  ! ! !     " !     knstats=1,391,37,64,13 
9  ! ! !      "  knstats=2,391,1.11721e+06,64,180642 
10  ! ! !     . "   knstats=2,391,120527,64,20368 

Ich mag einen neuen Datenrahmen zu schaffen, die aus den Reihen zusammengesetzt ist, die übereinstimmenden „S“ und " T "Einträge in beiden Matrizen, zusammen mit der Prob-Spalte von dfA und der Knstats-Spalte von dfB. Das Ergebnis sollte in etwa wie folgt aussehen, und es ist wichtig, dass die Reihenfolge der gleiche ist:

   S      T   prob        knstats 
0  ! ! !    ! ! ! ! 8.1623999e-05    knstats=2,391,104,64,25 
1  ! ! !    ! ! ! " 0.00354090007    knstats=4,391,6,64,2 
2  ! ! !    ! ! ! . 0.00210241997    knstats=4,391,5,64,2 
3  ! ! !    ! ! ! ? 6.55684998e-05    knstats=1,391,4,64,4 
4  ! ! !     ! ! !  0.203119993   knstats=220,391,303,64,55 
5  ! ! !     ! ! 0.00481862016   knstats=16,391,957,64,115 
6  ! ! !      ! 0.0274260994   knstats=28,391,5659,64,932 
7  ! ! !    " ! ! ! 7.99940026e-05    knstats=2,391,2,64,1 
8  ! ! !     " ! 1.51188997e-05    knstats=1,391,37,64,13 
9  ! ! !      " 8.50678989e-05 knstats=2,391,1.11721e+06,64,180642 

Antwort

20

Sie können sie so zusammen:

s1 = pd.merge(dfA, dfB, how='inner', on=['S', 'T']) 

Zum NA Zeilen fallen:

s1.dropna(inplace=True) 
+2

Ich bin nicht daran interessiert, sie einfach zu verschmelzen, sondern die Kreuzung zu nehmen. Das heißt, wenn es eine Zeile gibt, in der 'S' und 'T' nicht sowohl prob als auch knstats haben, möchte ich diese Zeile loswerden. Sie werden feststellen, dass dfA und dfB nicht genau übereinstimmen. Dies scheint jedoch ein guter erster Schritt zu sein. Wie kann ich die Zeilen mit NaN-Werten in prob oder knstats in der Ausgabematrix beschneiden? – Bib

+0

Geändert zu how = 'inner', das berechnet die Schnittmenge basierend auf 'S' und 'T' – user308827

+0

Sie können dropna auch benutzen, um Reihen mit irgendwelchen NaNs fallenzulassen. Bearbeitete meine Antwort – user308827

Verwandte Themen