【发布时间】:2019-07-25 22:10:40
【问题描述】:
我有以下数据框,我想根据名称对列进行排序。
1 | 13_1 | 13_10| 13_2 | 2 | 3
9 | 31 | 2 | 1 | 3 | 4
我正在尝试按以下方式对列进行排序:
1 | 2 | 3 | 13_1 | 13_2 | 13_10
9 | 3 | 4 | 31 | 1 | 2
我一直在尝试使用df.sort_index(axis=1, inplace=True) 解决此问题,但结果与我的初始数据框相同。即:
1 | 13_1 | 13_10| 13_2 | 2 | 3
9 | 31 | 2 | 1 | 3 | 4
它似乎将 13_1 识别为 1.31 而不是 13.1。此外,我尝试将列名从字符串转换为浮点数。但是,结果证明将 13_1 和 13_10 都视为 13.1 给我重复的列名。
【问题讨论】:
-
数字中的下划线没有任何意义,只是为了便于阅读,因此 13_1 既不是 1.31 也不是 13.1,而只是 131。(请参阅PEP515。但列名显示为 13_1 ,它们肯定是字符串。
-
使用 PEP515 解释对列进行排序:
d = dict(zip(map(int, df.columns), df.columns)); df = df[map(d.get, sorted(map(int, df.columns)))]