2014-11-14 72 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