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

Posted

技术标签:

【中文标题】按字符串列的长度对数据帧进行排序[重复]【英文标题】:Sort dataframe by length of a string column [duplicate] 【发布时间】:2018-02-20 23:22:34 【问题描述】:

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

Author | Title | Reviews

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

如果我这样做了

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

它按字母顺序排序,从“z”开始。

如何让它按评论列中字符串的长度排序?

【问题讨论】:

【参考方案1】:

我认为您需要 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

【讨论】:

【参考方案2】:

选项 1 使用 df.argsortdf.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_valuesdf.iloc

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

   Review
0  foo123
1     abc
2       b

【讨论】:

以上是关于按字符串列的长度对数据帧进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

对 DataTable 字符串列进行排序,但底部为空/空

Pandas 按逻辑天对数据帧进行排序

按r中的列对数据帧进行排序[重复]

按特定数据对字符串进行排序[重复]

按字符串长度对熊猫系列中的列表进行排序

按长度对字符串的 ArrayList 进行排序