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

时间:2015-11-20 12:21:13

标签: python pandas dataframe

我有两个DataFrame我想首先在DataFrame1中的col1中查找匹配值,在DataFrame2中查找col1,并使用DataFrame2中的其他列打印DataFrame1中的所有列。 例如

我试过了,

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中有值。

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

2 个答案:

答案 0 :(得分:1)

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

https://magervalp.github.io/2013/03/19/poking-around-in-masreceipts.html

如果您愿意,可以轻松删除Gene_id

答案 1 :(得分:0)

希望这会对你有所帮助。

让我知道它是否有效。

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)