我想通過按字母順序和數字順序對資料框的列進行排序來重新索引它們。
在我的資料框 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)
但沒有運氣,因為列名是一個字串。
感謝您花時間閱讀我的問題并幫助我。非常感激!
uj5u.com熱心網友回復:
按自然順序對列名進行排序后,您可以使用[]索引對列重新排序。
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']
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/333896.html
上一篇:字典按型別排序值
