Skip to main content
 首页 » 编程设计

python之在 Pandas 数据框中按名称和数字重新排列列

2025年05月04日21傻小

例如,我有一个包含这样列的数据框(因为 1 是任何值以简化这里的事情:

         ID    App R1    Pear R1    Oro R1   App R2   Pear R2    Oro R2    App R3   Pear R3   Oro R3 
0         1         1         1         1         1         1         1         1         1        1 
1         1         1         1         1         1         1         1         1         1        1 

我想像这样重新排列列:

         ID    App R1    App R2    App R3   Pear R1   Pear R2    Pear R3    Oro R1   Oro R2   Oro R3 
0         1         1         1         1         1         1         1         1         1        1 
1         1         1         1         1         1         1         1         1         1        1 

我试过:

df.columns = [['ID'] + ['App R{}'.format(r+1)] + ['Pear R{}'.format(r+1)] + ['Matched fragment ions R{}'.format(r+1)] + ['Oro R{}'.format(r+1)] for r in range(len(files))] 

n.b: App, Pear 和 Oro 的数量 r 将取决于我开始的 csv 的数量 r

然而,到目前为止还没有成功。

谢谢你能帮我解决这个问题。

请您参考如下方法:

使用带有查找键的自定义排序

In [4291]: look = {'I':0, 'A':1, 'P':2, 'O':3}  # order for letters  
 
In [4292]: sorted(df.columns, key=lambda x: look.get(x[0], ''))  # first letter key 
Out[4292]: 
['ID', 
 'App R1', 
 'App R2', 
 'App R3', 
 'Pear R1', 
 'Pear R2', 
 'Pear R3', 
 'Oro R1', 
 'Oro R2', 
 'Oro R3'] 
 
In [4293]: df[sorted(df.columns, key=lambda x: look.get(x[0], ''))] 
Out[4293]: 
   ID  App R1  App R2  App R3  Pear R1  Pear R2  Pear R3  Oro R1  Oro R2  \ 
0   1       1       1       1        1        1        1       1       1 
1   1       1       1       1        1        1        1       1       1 
 
   Oro R3 
0       1 
1       1