gpt4 book ai didi

python - 如何根据其他列的多个突发事件转换列?

转载 作者:行者123 更新时间:2023-12-04 10:52:05 26 4
gpt4 key购买 nike

我有一个数据框:

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。即,去掉“/”并用 G 替换 0,用 A 替换 1。接下来,第 1 行应该用 C 替换 0,用 A 替换 1。然后按照下一行的模式,得到:
  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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com