python - 如何根据其他列的多种意外情况转换列?

标签 python pandas

我有一个数据框:

df = pd.DataFrame({'REF':list('GCTT'), 'ALT':list('AACG'),
                   'A1':['0/1','0/1','0/0','0/1'],
                   'A2':['1/1','0/1','0/1','0/0']})
  REF ALT   A1   A2
0   G   A  0/1  1/1
1   C   A  0/1  0/1
2   T   C  0/0  0/1
3   T   G  0/1  0/0

我想根据 REF 和 ALT 列中的值转换 A1 和 A2 列。因此,第 0 行中的 A1 和 A2 列应为 GA 和 AA。即丢失“/”并将 0 替换为 G,将 1 替换为 A。接下来,第 1 行应将 0 替换为 C,将 1 替换为 A。然后按照下一行的模式,得到:

  REF ALT  A1   A2
0   G   A  GA  AA
1   C   A  CA  CA
2   T   C  TT  TC
3   T   G  TG  TT

在我的数据中有数百个A列:A1,A2......An-1,An。因此,该解决方案需要可在所有列中复制。

最佳答案

I wonder how fast this solution is with your data:

for col in ["A1","A2"]: 
        df[col]= df[col].str.split("/",expand=True) \
                        .replace(["0","1"],[df.REF,df.ALT]) \
                        .agg("".join,axis=1) 

df                                                                                                                  

  REF ALT  A1  A2
0   G   A  GA  AA
1   C   A  CA  CA
2   T   C  TT  TC
3   T   G  TG  TT

编辑:解决方案 2.,使用索引:

# helper structs:
ncbscols= ["REF","ALT"]
cols= df.columns.difference(ncbscols)

ii= pd.MultiIndex.from_product([list("ACGT"),list("ACGT"),["0/0","0/1","1/1","1/0"] ])
ser= pd.Series( [t[2].replace("/","").replace("0",t[0]).replace("1",t[1]) for t in ii ],  index=ii )

# the main calculation:
for c in cols:
    mi= pd.MultiIndex.from_arrays([ df.REF.values,df.ALT.values,df[c].values ])
    df[c]= ser[mi].values


ser:
 A  A  0/0    AA
      0/1    AA
      1/1    AA
      1/0    AA
   C  0/0    AA
             ..
T  G  1/0    GT
   T  0/0    TT
      0/1    TT
      1/1    TT
      1/0    TT
Length: 64, dtype: object 

df:
  REF ALT  A1  A2
0   G   A  GA  AA
1   C   A  CA  CA
2   T   C  TT  TC
3   T   G  TG  TT

关于python - 如何根据其他列的多种意外情况转换列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59433251/

相关文章:

python - 将 NumPy 数组乘以标量

python - OpenCV Simple Blob Detection - 在窗口中显示结果

Python 将大型 numpy 数组转换为 pandas 数据框

python - Pandas - 使用值列表创建较小的框架

Python 3 : checking version before syntactic analysis

javascript - 如何在 JavaScript 中调用 Python 变量?

python - 展开数据框中的列表,但有两列包含列表

python - 如何将 DataFrame 中的 K 个随机值附加到不重复的列表列表中?

python - 如何从 Pandas 的嵌套字典中获取特定的键值?

python - Python/Dask 支持的分布式文件系统