假設我有以下數據框:df = pd.DataFrame({'id': [1,2,3,4,5,6,7,8,9,10], 'name': ['a', 'nkjnkj', 'oijhoiuh', 'on', 'lnjjn', 'kmlkm', 'molijoijoij', 'kljkljhlh', 'ghkghgj', 'ihkjhkj']})我想按名稱的長度對其進行排序,我可以這樣做:df['len'] = df['name'].str.len()df.sort_values('len') id name len 1 a 1 4 on 2 5 lnjjn 5 6 kmlkm 5 2 nkjnkj 6 9 ghkghgj 7 10 ihkjhkj 7 3 oijhoiuh 8 8 kljkljhlh 9 7 molijoijoij 11但可以做單行嗎?就像是:df.sort_by(df['name'].str.len()) #doesn't exist換句話說,我可以根據不在數據框中的系列對數據框進行排序嗎?
3 回答

慕姐4208626
TA貢獻1852條經驗 獲得超7個贊
只需將一個返回要排序的值的函數傳遞到key參數中即可
df.sort_values(by="name", key=lambda col: col.str.len())
id name
0 1 a
3 4 on
4 5 lnjjn
5 6 kmlkm
1 2 nkjnkj
8 9 ghkghgj
9 10 ihkjhkj
2 3 oijhoiuh
7 8 kljkljhlh
6 7 molijoijoij

呼喚遠方
TA貢獻1856條經驗 獲得超11個贊
修復你的代碼
df.assign(len = df['name'].str.len()).sort_values('len').drop('len',1)
id name
0 1 a
3 4 on
4 5 lnjjn
5 6 kmlkm
1 2 nkjnkj
8 9 ghkghgj
9 10 ihkjhkj
2 3 oijhoiuh
7 8 kljkljhlh
6 7 molijoijoij
添加回答
舉報
0/150
提交
取消