python - 对 pandas 数据框中的列进行排序

标签 python pandas

我有一个带有列标题“DIV3、DIV4、DIV5 ... DIV30”的数据框

我的问题是 pandas 会按以下方式对列进行排序:

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

有没有办法让个位数排在前面?即:

 DIV3, DIV4, DIV5... DIV30

最佳答案

您可以通过sorting in "human order"解决这个问题:

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

关于python - 对 pandas 数据框中的列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26595546/

相关文章:

python - Pandas 风格的每列都有不同的颜色

python - 快速访问字典中的部分数据

python - Dask 中的 read_sql_table 返回 NoSuchTableError

python - BeautifulSoup4 抓取 : Pandas "arrays must all be same length" when exporting data to csv

python - 在混合了 int 和 string python 的数据帧上使用 groupby.sum()

python - 如何定义具有动态输入的 python 字符串(准)常量?

python - 尝试在 DF 的切片副本上设置值

python - Pandas :按索引值分组,然后计算分位数?

python - pyodbc.connect() 有效,但 sqlalchemy.create_engine().connect() 无效

python - 使用 Pandas 转换时间序列数组中包含周期的数据帧