Python 根据熊猫图案切换两列

Python 根据熊猫图案切换两列,python,pandas,parsing,Python,Pandas,Parsing,我实际上有一个数据帧,例如: 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 g3474

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

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也会移动


感谢您的帮助

您可以使用
np。其中
,如下所示:

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

编辑您的后续问题:

嗨,我不确定我的帖子是否真的很清楚,事实上我需要在“seq1_id”列中输入第一个基因名,其第一个基因号等于_0035,在“seq2_id”列中输入第一个基因名等于_0042,在我的示例中,我只需要切换第1行和第3行。如果你看一下我想要的结果,在第一列中,我所有的基因名称的第一个编号都是_0035,这一列也是一样的2@Benjamin现在试一试?谢谢,它很管用,但它实际上引发了另一个问题,我还需要切换其他列,我将它添加到了我的第一个示例中。实际上,我还有另一列对应于GC组件的长度,它们也必须切换。谢谢你的帮助help@Benjamin我更新了答案,但在得到答案后再添加其他问题并不是一个好形式。