2014-11-14 85 views
12

假設我有像兩個DataFrames這樣:熊貓 - 基於列兩個數據幀的交點條目

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

我想創建其由行的新的數據幀,其具有匹配的「S」和「 T「條目,以及來自dfA的概率列和來自dfB的knstats列。結果應該看起來像以下,這是很重要的順序是一樣的:

   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 

回答

20

可以使它們合併:

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

要刪除NA行:

s1.dropna(inplace=True) 
+2

我對合並它們並不感興趣,但是考慮了交叉點。也就是說,如果有一行'S'和'T'沒有prob和knstats,我想擺脫那一行。你會注意到dfA和dfB完全不匹配。但是,這似乎是一個好的第一步。我如何在輸出矩陣中用prob或knstats修剪NaN值的行? – Bib

+0

更改爲='內部',這將計算基於'S'和'T'的交點 – user308827

+0

此外,您可以使用dropna刪除任何NaN的行。編輯我的回答 – user308827