3 回答

TA貢獻2003條經驗 獲得超2個贊
使用key
參數(新增1.1.0
)
df.sort_values(by=['xxx'], key=lambda col: col.map(lambda x: int(re.split('(\d+)',x)[-2])))

TA貢獻1853條經驗 獲得超18個贊
使用列表理解和正則表達式:
>>> import pandas as pd
>>> import re #Regular expression
>>> a = pd.DataFrame({'label':['AS20H1','AS20H2','AS20H11','ASH1','ASGH22','ASHGT3']})
>>> a
label
0 AS20H1
1 AS20H2
2 AS20H11
3 ASH1
4 ASGH22
5 ASHGT3
r'(\d+)(?!.*\d)' 匹配字符串中的最后一個數字
>>> a['sort_int'] = [ int(re.search(r'(\d+)(?!.*\d)',i).group(0)) for i in a['label']]
>>> a
label sort_int
0 AS20H1 1
1 AS20H2 2
2 AS20H11 11
3 ASH1 1
4 ASGH22 22
5 ASHGT3 3
>>> a.sort_values(by='sort_int',ascending=True)
label sort_int
0 AS20H1 1
3 ASH1 1
1 AS20H2 2
5 ASHGT3 3
2 AS20H11 11
4 ASGH22 22

TA貢獻1856條經驗 獲得超17個贊
您可以從列中提取整數,然后使用它對數據幀進行排序
df["new_index"] = df.yourColumn.str.extract('(\d+)') df.sort_values(by=["new_index"], inplace=True)
如果您在“new_index”列中得到一些 NA,您可以在 sort_values 方法中使用選項 na_position 來選擇放置它們的位置(開始或結束)
添加回答
舉報