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