繁体   English   中英

如果列中有匹配的值,则使用另一个dataFrame注释一个dataFrame

[英]Annotating one dataFrame using another dataFrame, if there is matching value in column

我有两个DataFrame,首先要查找dataFrame1的col1中的值与DataFrame2的col1中的值,并打印出DataFrame1中的所有列以及DataFrame2中的其他列。 例如

我曾尝试追踪,

data    = 'file_1'
Up      = pd.DataFrame.from_csv(data, sep='\t')
Up      = Up.reset_index(drop=False)
Up.head()
    Gene_id baseMean    log2FoldChange  lfcSE   stat    pvalue  padj
0   ENSG.16 176.275036  0.9475260059    0.4310373793    2.1982455617    0.0279316115    0.198658
1   ENSG.10 80.199435   0.4349592748    0.2691551416    1.6160169639    0.1060906455    0.369578
2   ENSG.15 1649.400749 -0.0215428237   0.1285061198    -0.1676404495   0.8668661474    0.947548
3   ENSG.10 25507.767530    0.5145516695    0.2473335499    2.0803957642    0.0374892475    0.229378
4   ENSG.12 70.122885   -0.2612483888   0.2593848667    -1.00718439

第二个数据帧是

mydata  = 'file_2'
annon = pd.DataFrame.from_csv(mydata, sep='\t')
annon = annon.reset_index(drop=False)

annon.head()
    Gene_id     sam_1   sam2    sam3    sam4    sam5    sam6    sam7    sam8    sam9    sam10   sam11
0   ENSG.16 404 55  33  39  102 43  193 244 600 174 120
1   ENSG.10 58  89  110 69  64  48  61  81  98  75  119
2   ENSG.15 1536    1246    2540    1751    1850    2137    1460    1362    2158    1367    1320
3   ENSG.10 28508   23073   19982   13821   20355   28835   26875   25632   27131   30991   29351
4   ENSG.12 87  81  121 67  98  47  37  59  68  44  81

以下是我到目前为止尝试过的

x=pd.merge(Up[['Gene_id' , 'log2FoldChange ', 'pvalue ' , 'padj']] , annon , on = 'Gene_id')

x.head()Gene_id log2FoldChange pvalue padj sam_1 sam2 sam3 sam4 sam5 sam6 sam7 sam8 sam9 sam10 sam11

它只是给了我文件的头文件,没有别的了。所以我用以下一行值查看了file1(Up),这就是我正在得到的

print(Up.loc[Up['Gene_id'] =='ENSG.16'])

Empty DataFrame
Columns: [Gene_id, baseMean , log2FoldChange , lfcSE , stat , pvalue , padj]
Index: []

但是实际上这不为空,并且在数据帧Up中具有值。

任何解决方案都将很棒.. !!!

pd.merge(df1[['Gene_Id' , 'log2FoldChange', 'pvalue' , 'padj']] , df2 , left_on='Gene_Id' , right_on= 'Gene_id')

在此处输入图片说明

然后,您可以轻松删除Gene_id

希望这对您有所帮助。

让我知道它是否有效。

import pandas as pd

# creating test Dataframe1
df = pd.DataFrame(['ENSG1',  162.315169869338,    0.920583258294463,   0.260406974056691,   3.53517128959092,    0.000407510906151687,    0.0176112964515702])
df=df.T


# important thing is make column 0 as its index
df.index=df[0]
print(df)

# creating test Dataframe2
df2 = pd.DataFrame(['ENSG1',   404, 55,  33,  39,  102, 43, 193, 244, 600, 174, 120])
df2=df2.T

# important thing is make column 0 as its index
df2.index=df2[0]
print(df2)

# concatinate both the frames using axis=1 (outer or inner as per your need)

x = pd.concat([df,df2],axis=1,join='outer')

print(x)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM