我当前的数据框列的排序方式为
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']
答案 0 :(得分:1)
使用key
参数作为字符串的第一个值,此处S
和M
与reverse=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]