【问题标题】:Merging Data Frames based on two columns基于两列合并数据框
【发布时间】:2018-10-17 14:49:48
【问题描述】:

我有两个数据框。一个包含所有突变的列表(+ 相关分数),另一个包含实际观察到的突变子集(+ 测量值)。

我想将我的第二个数据框(观察到的子集)合并到更大的数据框(所有可能)中,并带来与观察到的突变相关的数据(拟合值)。但是,当我这样做时,我的合并数据框显示所有拟合值的 NaN。

我尝试合并的代码如下,其中包含我的数据帧示例和结果输出(作为 s1)。

s1 = pd.merge(data_frame, data_frame_2, how='left', on=['position', 'mutation'])

    data_frame #all possible
position    mutation    A_score Normalized_A_Score
0   1   *   0.00    0.000000
1   1   A   849.69  100.007062
2   1   C   849.94  100.036486
3   1   D   849.76  100.015301
4   1   E   849.67  100.004708
5   1   F   849.00  99.925850
6   1   G   849.56  99.991761
7   1   H   849.83  100.023540
8   1   I   849.63  100.000000
9   1   K   851.51  100.221273
10  1   L   849.56  99.991761
11  1   M   849.63  100.000000
12  1   N   849.63  100.000000
13  1   P   849.00  99.925850
14  1   Q   849.13  99.941151
15  1   R   851.70  100.243635
16  1   S   849.15  99.943505
17  1   T   849.94  100.036486
18  1   V   849.63  100.000000
19  1   W   849.00  99.925850
20  1   Y   849.10  99.937620

data_frame_2 #observed
position    mutation    fit_val adjusted_fit_val
0   1   *   0.633847    0.274555
1   1   A   0.832698    0.473406
2   1   C   0.857012    0.497719
3   1   D   0.873119    0.513827
4   1   E   0.859805    0.500512
5   1   F   0.359053    -0.000239
6   1   G   0.786489    0.427197
7   1   H   0.876687    0.517395
8   1   I   0.820826    0.461534
9   1   K   0.886447    0.527154
10  1   L   0.868197    0.508905
11  1   N   0.909416    0.550124
12  1   P   0.843697    0.484405
13  1   Q   0.838892    0.479600
14  1   R   0.878175    0.518883
15  1   S   0.981739    0.622446
16  1   T   0.709694    0.350402
17  1   W   0.866746    0.507453
18  1   Y   0.876647    0.517355


    s1 #merged
position    mutation    A_score Normalized_A_Score  fit_val adjusted_fit_val
0   1   *   0.00    0.000000    NaN NaN
1   1   A   849.69  100.007062  NaN NaN
2   1   C   849.94  100.036486  NaN NaN
3   1   D   849.76  100.015301  NaN NaN
4   1   E   849.67  100.004708  NaN NaN
5   1   F   849.00  99.925850   NaN NaN
6   1   G   849.56  99.991761   NaN NaN
7   1   H   849.83  100.023540  NaN NaN
8   1   I   849.63  100.000000  NaN NaN
9   1   K   851.51  100.221273  NaN NaN
10  1   L   849.56  99.991761   NaN NaN
11  1   M   849.63  100.000000  NaN NaN
12  1   N   849.63  100.000000  NaN NaN
13  1   P   849.00  99.925850   NaN NaN
14  1   Q   849.13  99.941151   NaN NaN
15  1   R   851.70  100.243635  NaN NaN
16  1   S   849.15  99.943505   NaN NaN
17  1   T   849.94  100.036486  NaN NaN
18  1   V   849.63  100.000000  NaN NaN
19  1   W   849.00  99.925850   NaN NaN
20  1   Y   849.10  99.937620   NaN NaN

当我将数据框合并在一起时,为什么不会显示 data_frame_2 中的 fit_val 或adjusted_fit_val 列值?感谢您对理解的任何帮助!

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    我认为有不同类型的列position - 字符串和整数:

    data_frame['position'] = data_frame['position'].astype(int)
    data_frame_2['position'] = data_frame_2['position'].astype(int)
    
    s1 = pd.merge(data_frame, data_frame_2, how='left', on=['position', 'mutation'])
    print (s1)
        position mutation  A_score  Normalized_A_Score   fit_val  adjusted_fit_val
    0          1        *     0.00            0.000000  0.633847          0.274555
    1          1        A   849.69          100.007062  0.832698          0.473406
    2          1        C   849.94          100.036486  0.857012          0.497719
    3          1        D   849.76          100.015301  0.873119          0.513827
    4          1        E   849.67          100.004708  0.859805          0.500512
    5          1        F   849.00           99.925850  0.359053         -0.000239
    6          1        G   849.56           99.991761  0.786489          0.427197
    7          1        H   849.83          100.023540  0.876687          0.517395
    8          1        I   849.63          100.000000  0.820826          0.461534
    9          1        K   851.51          100.221273  0.886447          0.527154
    10         1        L   849.56           99.991761  0.868197          0.508905
    11         1        M   849.63          100.000000       NaN               NaN
    12         1        N   849.63          100.000000  0.909416          0.550124
    13         1        P   849.00           99.925850  0.843697          0.484405
    14         1        Q   849.13           99.941151  0.838892          0.479600
    15         1        R   851.70          100.243635  0.878175          0.518883
    16         1        S   849.15           99.943505  0.981739          0.622446
    17         1        T   849.94          100.036486  0.709694          0.350402
    18         1        V   849.63          100.000000       NaN               NaN
    19         1        W   849.00           99.925850  0.866746          0.507453
    20         1        Y   849.10           99.937620  0.876647          0.517355
    

    【讨论】:

    • 嗯,由于某种原因,当我完全复制该代码时(在将数据类型转换为 int 之后)。我仍然得到所有被合并的 fit_val 和 adjust_fit_val 列的 NaN 值。
    猜你喜欢
    • 1970-01-01
    • 2018-01-30
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多