在pandas数据框中排序列

1 投票
1 回答
1552 浏览
提问于 2025-04-30 00:03

我有一个数据表,里面的列标题是“DIV3, DIV4, DIV5 ... DIV30”。

我的问题是,pandas(一个处理数据的工具)会把这些列按照以下方式排序:

 DIV10, DIV11, DIV12..., DIV3, DIV4, DIV5

有没有办法让单个数字的列排在前面?也就是说,像这样:

 DIV3, DIV4, DIV5... DIV30
暂无标签

1 个回答

3

你可以通过以“人类的方式”排序来解决这个问题:

import re
import pandas as pd
def natural_keys(text):
    '''
    alist.sort(key=natural_keys) sorts in human order
    http://nedbatchelder.com/blog/200712/human_sorting.html
    (See Toothy's implementation in the comments)
    '''
    def atoi(text):
        return int(text) if text.isdigit() else text

    return [atoi(c) for c in re.split('(\d+)', text)]

columns = ['DIV10', 'DIV11', 'DIV12', 'DIV3', 'DIV4', 'DIV5']    
df = pd.DataFrame([[1]*len(columns)], columns=columns)
print(df)
#    DIV10  DIV11  DIV12  DIV3  DIV4  DIV5
# 0      1      1      1     1     1     1

df = df.reindex(columns=sorted(df.columns, key=natural_keys))
print(df)

这样就能得到

   DIV3  DIV4  DIV5  DIV10  DIV11  DIV12
0     1     1     1      1      1      1

撰写回答