Python 基于外部序列的数据帧排序
假设我有以下数据帧:Python 基于外部序列的数据帧排序,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有以下数据帧: 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'
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
但有可能做一个班轮吗?比如:
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
换句话说,我可以根据不在数据帧中的序列对数据帧进行排序吗?尝试以下操作:
df.loc[df['name'].str.len().argsort()]
试试这个:
df.loc[df['name'].str.len().argsort()]
只需将一个函数传递给
键
参数,该函数返回要排序的值
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
只需将一个函数传递给
键
参数,该函数返回要排序的值
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
修正你的代码
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
修正你的代码
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