Python按相反的字母顺序对数据框列进行排序

时间:2020-01-22 11:10:12

标签: python pandas dataframe

我当前的数据框列的排序方式为

df.columns = ['S1FF', 'S1Ipmax', 'S2POA', 
       ...
       'M04Vpmax', 'M04elec_event', 'M04group', 'M04met_event', 'M04mode',
       'M04validation_1min', 'M04validation_2min', 'M04S1T', 'M04S2T',
       'M04datetime']  # Columns start with S1,S2, M01 to M24

我想按相反的字母顺序对其进行排序。我现在的代码是

df = df.reindex(sorted(df.columns), axis=1)

我目前的输出是

df.columns = ['M01FF', 'M01Ipmax', 'M02POA', 
       ...
       'S1FF', 'S1Ipmax', 'S2POA']

但是我的预期输出是相反的字母顺序

df.columns = ['S1FF', 'S1Ipmax', 'S2POA','M01FF', 'M01Ipmax', 'M02POA', 
       ...
       'M23FF', 'M24Ipmax', 'M24POA']

1 个答案:

答案 0 :(得分:1)

使用key参数作为字符串的第一个值,此处SMreverse=True

L = ['M01FF', 'M01Ipmax', 'M02POA', 'S1FF', 'S1Ipmax', 'S2POA']
df = pd.DataFrame(columns=L)
print (df)
Empty DataFrame
Columns: [M01FF, M01Ipmax, M02POA, S1FF, S1Ipmax, S2POA]
Index: []

df = df[sorted(df.columns, key=lambda x: x[0], reverse = True)]
print (df)
Empty DataFrame
Columns: [S1FF, S1Ipmax, S2POA, M01FF, M01Ipmax, M02POA]
Index: []

编辑:

import natsort as ns
s = ns.natsorted([x for x in df.columns if x[0] == 'S'])
m = ns.natsorted([x for x in df.columns if x[0] == 'M'])
df = df[s + m]