根据Pandas图案切换两列

2024-10-01 11:24:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我实际上有一个数据帧,比如:

seq1_id             seq2_id             dN    length1   length2  GC1   GC2   
g13600.t1_0042_0042 g66097.t1_0035_0035 0.10   45         67     0.78  0.67
g1464.t1_0035_0042  g45594.t1_0042_0035 0.67   56         34     0.65  0.87
g34744.t1_0042_0035 g50055.t1_0035_0035 0.08   34         76     0.75  0.45
g12096.t1_0035_0042 g34020.t1_0042_0035 0.43   31         54     0.89  0.76

我想改变我的列的顺序,事实上,在第一列只得到第一个基因名,第一个数字是0035,在另一列第一个数字是0042,这里它会给出:

seq1_id             seq2_id             dN     length1   length2  GC1   GC2 
g66097.t1_0035_0035 g13600.t1_0042_0042 0.10    45         67     0.78  0.67
g1464.t1_0035_0042  g45594.t1_0042_0035 0.67    34         56     0.87  0.65
g50055.t1_0035_0035 g34744.t1_0042_0035 0.08    34         76     0.75  0.45
g12096.t1_0035_0042 g34020.t1_0042_0035 0.43    54         31     0.76  0.89

如你所知,在第一列,我只得到了以0035开头的基因名 当存在swip时,列长度1和2以及GC1和2也会移动

谢谢你的帮助


Tags: idt1dnseq2seq1length1length2gc1
1条回答
网友
1楼 · 发布于 2024-10-01 11:24:19

您可以使用np.where,如下所示:

import numpy as np
df.length1, df.legth2 = np.where(df.seq1_id.str.contains('t1_0035'), df.length1, df.legth2), np.where(df.seq1_id.str.contains('t1_0042'), df.length1, df.legth2)
df.seq1_id, df.seq2_id = np.where(df.seq1_id.str.contains('t1_0035'), df.seq1_id, df.seq2_id), np.where(df.seq1_id.str.contains('t1_0042'), df.seq1_id, df.seq2_id)
>>> df
    seq1_id seq2_id dN
0   g66097.t1_0035_0035 g13600.t1_0042_0042 0.10
1   g1464.t1_0035_0042  g45594.t1_0042_0035 0.67
2   g50055.t1_0035_0035 g34744.t1_0042_0035 0.08
3   g12096.t1_0035_0042 g34020.t1_0042_0035 0.43

编辑您的后续问题:

相关问题 更多 >