按字母和数字顺序对 Dataframe 列进行排序

Sorting Dataframe Columns By Alphabetical & Numerical Order

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

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

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

我希望它们的顺序如下:

Round 1 Position, Round 1 Price, Round 1 Score, Round 2 Position, Round 2 Price, Round 2 Score, Round 3 Position, Round 3 Price, Round 3 Score, ..., Round 10 Position, Round 10 Price, Round 10 Score

我试过以下方法:

df.reindex(sorted(df.columns, key=lambda x: float(x[1:])), axis=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']