例如,我有一个包含这样列的数据框(因为 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
