按字符串列的长度对数据帧进行排序

时间:2017-09-12 13:10:19

标签: python string pandas sorting dataframe

使用Python。我有一个包含三列的数据框:

Author | Title | Reviews

我想按“评论”列中字符串的长度排序。

如果我这样做

df.sort_values('Review', ascending = False)

按字母顺序排序,以' z'开头。

如何按照“评论”列中字符串的长度对其进行排序?

2 个答案:

答案 0 :(得分:5)

我认为您需要len才能将长度分配给索引,sort_index和最后reset_index

df = pd.DataFrame({'Author':list('abcdef'),
                   'Title ':list('abcdef'),
                   'Review':['aa', 'aasdd', 'dwd','dswee dass', 'a', 'sds']})

print (df)
  Author      Review Title 
0      a          aa      a
1      b       aasdd      b
2      c         dwd      c
3      d  dswee dass      d
4      e           a      e
5      f         sds      f

df.index = df['Review'].str.len()
df = df.sort_index(ascending=False).reset_index(drop=True)
print (df)
  Author      Review Title 
0      d  dswee dass      d
1      b       aasdd      b
2      c         dwd      c
3      f         sds      f
4      a          aa      a
5      e           a      e

答案 1 :(得分:4)

选项1
使用 df.argsort df.reindex

df

   Review
0     abc
1  foo123
2       b

df = df.reindex((-df.Review.str.len()).argsort()).reset_index(drop=True)
df

  Review
0  foo123
1     abc
2       b

选项2
使用 np.argsort

的类似解决方案
df = df.reindex(np.argsort(-df.Review.str.len())).reset_index(drop=True)
df

   Review
0  foo123
1     abc
2       b

选项3
使用 df.sort_values df.iloc

df = df.iloc[(-df.Review.str.len()).argsort()].reset_index(drop=True)
df

   Review
0  foo123
1     abc
2       b