基于值pandas有条件地划分数据帧中的列

时间:2015-06-12 15:33:22

标签: python pandas dataframe

所以我有一个看起来像这样的数据框......让我们称之为df1

  Disease  Gene1  Gene2  Gene3  Gene4
0      D1      1      1     26      1
1      D2      1      1      1      1
2      D3      1     18      1     17
3      D4     25      1      1      1
4      D5      1      1      1      1
5      D6      1     33      1     12
6      D7      1      1      1      1
7      D8      5      1      1      1

另一个看起来像...... df2:

    Disease Counts
0   D1  117
1   D2  224
2   D3  411
3   D4  180
4   D5  96
5   D6  24
6   D7  331
7   D8  512

我需要根据疾病列匹配将df1中的行除以df2中的计数。

1 个答案:

答案 0 :(得分:0)

如果您为两个dfs设置索引为“疾病”,则可以调用div

In [127]:
df.set_index('Disease').div(df1.set_index('Disease')['Counts'], axis=0)

Out[127]:
            Gene1     Gene2     Gene3     Gene4
Disease                                        
D1       0.008547  0.008547  0.222222  0.008547
D2       0.004464  0.004464  0.004464  0.004464
D3       0.002433  0.043796  0.002433  0.041363
D4       0.138889  0.005556  0.005556  0.005556
D5       0.010417  0.010417  0.010417  0.010417
D6       0.041667  1.375000  0.041667  0.500000
D7       0.003021  0.003021  0.003021  0.003021
D8       0.009766  0.001953  0.001953  0.001953

通过将索引设置为“疾病”,dfs将与索引值对齐

然后,您可以致电reset_index恢复列:

In [132]:
(df.set_index('Disease').div(df1.set_index('Disease')['Counts'], axis=0)).reset_index()

Out[132]:
  Disease     Gene1     Gene2     Gene3     Gene4
0      D1  0.008547  0.008547  0.222222  0.008547
1      D2  0.004464  0.004464  0.004464  0.004464
2      D3  0.002433  0.043796  0.002433  0.041363
3      D4  0.138889  0.005556  0.005556  0.005556
4      D5  0.010417  0.010417  0.010417  0.010417
5      D6  0.041667  1.375000  0.041667  0.500000
6      D7  0.003021  0.003021  0.003021  0.003021
7      D8  0.009766  0.001953  0.001953  0.001953