熊猫:提取列值,其中列名与另一列中的行值匹配

时间:2019-01-30 00:26:35

标签: python pandas

这似乎很简单,但是却使我陷入困境。双关语意在编码。

我有一个具有以下格式的数据框:

 df = pd.DataFrame({"chrom":[12,12], 
                   "Pos":[112233,112234], 
                    "ref_base":["A","G"], 
                    "alt_base":["T","C"], 
                    "A":[12,22], 
                    "T":[3,34], 
                    "G":[12,23], 
                    "C":[22,21]}, 
                    index=[0,1])


   chrom     Pos       ref_base  alt_base   A    T   G   C
   12        112233        A        T       12   3  23  22
   12        112234        G        C       22  34  23  21

我需要找到一种创建新列的方法,该列包含与ref_base列中的值匹配的A,T,G或C列中的值。

   chrom     Pos       ref_base  alt_base   A    T   G   C  ref_val
   12        112233        A        T       12   3  23  22    12
   12        112234        G        C       22  34  23  21    23

我最终想要做的是创建一个包含(ref_val,alt_base_val)元组的列,因此,如果有比首先创建各个列并加入它们更好的方法,那么我很高兴了解到那是。

chrom     Pos       ref_base  alt_base      A    T   G   C      AD
   12        112233        A        T       12   3  23  22    (12,3)
   12        112234        G        C       22  34  23  21    (23,21)

1 个答案:

答案 0 :(得分:2)

使用lookup

df['New']=tuple(zip(df.lookup(df.index,df.ref_base),df.lookup(df.index,df.alt_base)))
df
    A   C   G     Pos   T alt_base  chrom ref_base       New
0  12  22  12  112233   3        T     12        A   (12, 3)
1  22  21  23  112234  34        C     12        G  (23, 21)