【问题标题】:Sorting Dataframe Columns By Alphabetical & Numerical Order按字母和数字顺序对数据框列进行排序
【发布时间】:2021-12-07 07:07:19
【问题描述】:

我想通过按字母顺序和数字顺序对数据框的列进行排序来重新索引它们。

在我的数据框 df 中,我的列被命名为:

第 1 轮位置,第 2 轮位置,第 1 轮得分,第 2 轮得分,第 1 轮价格,第 2 轮价格,...,第 10 轮位置,第 10 轮得分,第 10 轮价格

我希望它们按如下顺序排列:

第 1 轮位置,第 1 轮价格,第 1 轮得分,第 2 轮位置,第 2 轮价格,第 2 轮得分,第 3 轮位置,第 3 轮价格,第 3 轮得分,...,第 10 轮位置,第 10 轮价格, 第 10 轮得分

我尝试了以下方法:

df.reindex(sorted(df.columns, key=lambda x: float(x[1:])), axis=1) 

但没有运气,因为列名是一个字符串。

感谢您花时间阅读我的问题并帮助我。非常感谢!

【问题讨论】:

    标签: python pandas sorting reindex


    【解决方案1】:

    将列名按自然顺序排序后,您可以使用[] 索引对列重新排序。

    import pandas as pd
    import natsort
    
    df = pd.DataFrame({'A2': [1, 2, 3],
                   'B1': [4, 5, 6],
                   'A1': [7, 8, 9]})
    
    # sort the column names
    col_names = df.columns
    sorted_col_names = natsort.natsorted(col_names)
    
    # re-order the columns
    df = df[sorted_col_names]
    print(df)
    

    输出:

       A1  A2  B1
    0   7   1   4
    1   8   2   5
    2   9   3   6
    

    How to sort alpha numeric set in python 的答案中有几个选项可用于对字母数字值进行排序。我测试了natsort 库,它适用于您的输入。

    columns = ['Round 1 Position', 'Round 2 Position', 'Round 1 Score', 'Round 2 Score', 'Round 1 Price',
               'Round 2 Price', 'Round 10 Position', 'Round 10 Score', 'Round 10 Price']
    columns_s = natsort.natsorted(columns)
    print(columns_s)
    

    输出:

    ['Round 1 Position', 'Round 1 Price', 'Round 1 Score', 'Round 2 Position', 'Round 2 Price', 'Round 2 Score', 'Round 10 Position', 'Round 10 Price', 'Round 10 Score']
    

    【讨论】:

    • 非常感谢,工作完美!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    • 2013-08-02
    相关资源
    最近更新 更多