如何根据存储在另一个数据帧中的列名选择列

时间:2018-02-02 09:10:35

标签: python pandas dataframe

我有2个dfs,df1的一部分显示在下面[1101行x 139列]

             GP9       VWF      ALOX12    C1orf198    MPL     PTGS1  
0           2.884147  2.189103  1.323701  1.411450  6.615392  5.637339
1           4.788212  0.434247  1.449879  1.313428  7.236131  5.770543
2           1.710748  3.370917  2.798043  1.531801  6.318867  5.261016
3           2.030750  4.599848  2.312753  2.626536  6.296336  5.823157
4           0.615780  3.480914  2.158669  1.939806  6.108159  6.000171
5           1.015158  2.282270  1.207885  1.630455  6.516448  5.638960

数据帧标题存储在另一个数据帧df2中,df2的一部分显示在下面[135行x 2列]

           P_value   gene_name
1     2.640666e-15         GP9
2     1.996181e-40         VWF
3     1.908219e-05      ALOX12
4     4.463029e-69    C1orf198
5     5.747815e-43         MPL
6     7.470865e-03       PTGS1
7     3.774896e-34        SELP
8     2.246091e-66      ITGA2B
9     1.146707e-53       ABCC3

我计算了那些基因df2的P值,p值小于0.05意味着这个基因对我的进一步研究很重要。所以我需要从df1中过滤出那些基因。

任何人都知道如何从df2中指示的基因名称中选择df1中的列?谢谢

2 个答案:

答案 0 :(得分:0)

df2.loc[df2['P_value'].lt(0.05), 'gene_name']

返回满足p值标准的基因名称。您可以使用此列表从df1中选择列:

df1[df2.loc[df2['P_value'].lt(0.05), 'gene_name']]

如果df2具有未出现在df1中的其他基因名称,则会引发KeyError。如果是这种情况,请使用intersection:

df1[df1.columns.intersection(df2.loc[df2['P_value'].lt(0.05), 'gene_name'])]

df1[df1.columns & (df2.loc[df2['P_value'].lt(0.05), 'gene_name'])]

答案 1 :(得分:0)

首先选择P_value小于0.5

的列名
cols = list(df2[df2['P_value'] < 0.05]['gene_name'])

然后过滤掉df1

中的列
df_new = df1[cols]
相关问题