2014-11-14 13 views
12

Supponiamo che io ho due DataFrames in questo modo:Pandas - intersezione di due frame di dati in base a colonna voci

>>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 

Voglio creare un nuovo dataframe che si compone delle righe che sono corrispondenti "S" e " T "voci in entrambe le matrici, insieme alla colonna prob da dfA e la colonna knstats da dfB. Il risultato dovrebbe essere qualcosa di simile a quanto segue, ed è importante che l'ordine è la stessa:

   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 

risposta

20

Si possono unire così:

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

Per escludere NA righe:

s1.dropna(inplace=True) 
+2

Non mi interessa semplicemente fonderli, ma prendendo l'incrocio. Cioè, se c'è una riga in cui "S" e "T" non hanno entrambi i prob e knstats, voglio sbarazzarmi di quella riga. Noterai che dfA e dfB non corrispondono esattamente. Tuttavia, questo sembra un buon primo passo. Come posso sfoltire le righe con valori NaN in prob o knstats nella matrice di output? – Bib

+0

Modificato su come = 'inner', che calcolerà l'intersezione basata su 'S' e 'T' – user308827

+0

Inoltre, è possibile utilizzare dropna per eliminare righe con qualsiasi NaN. Modificato la mia risposta – user308827

Problemi correlati