我有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中的列?谢谢
答案 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]