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

新手上路,请多包涵

我想按名称长度排序。似乎没有 key 参数 sort_values 所以我不确定如何完成这个。这是一个测试 df:

 import pandas as pd
df = pd.DataFrame({'name': ['Steve', 'Al', 'Markus', 'Greg'], 'score': [2, 4, 2, 3]})

原文由 Alex 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 799
2 个回答

You can use reindex of index of Series created by len with sort_values :

 print (df.name.str.len())
0    5
1    2
2    6
3    4
Name: name, dtype: int64

print (df.name.str.len().sort_values())
1    2
3    4
0    5
2    6
Name: name, dtype: int64

s = df.name.str.len().sort_values().index
print (s)
Int64Index([1, 3, 0, 2], dtype='int64')

print (df.reindex(s))
     name  score
1      Al      4
3    Greg      3
0   Steve      2
2  Markus      2

 df1 = df.reindex(s)
df1 = df1.reset_index(drop=True)
print (df1)
     name  score
0      Al      4
1    Greg      3
2   Steve      2
3  Markus      2

原文由 jezrael 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 DataFrame.sort_values 我们可以将计算字符串长度的匿名 (lambda) 函数(使用 .str.len() 系列方法)传递给 key 参数:

 df = pd.DataFrame({
    'name': ['Steve', 'Al', 'Markus', 'Greg'],
    'score': [2, 4, 2, 3]
})
print(df)

     name  score
0   Steve      2
1      Al      4
2  Markus      2
3    Greg      3
 df.sort_values(by="name", key=lambda x: x.str.len())

     name  score
1      Al      4
3    Greg      3
0   Steve      2
2  Markus      2

原文由 Erfan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题