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

Ale*_*exG 6 python sorting series pandas reindex

我想按名字长度排序.似乎没有key参数,sort_values所以我不知道如何实现这一点.这是一个测试df:

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

jez*_*ael 16

您可以使用reindexindexSeries通过创建len具有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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)


Erf*_*fan 14

DataFrame.sort_valueskey参数一起 使用,因为pandas >= 1.1.0

我们现在可以在sort_values方法中传递字符串的长度或任何其他自定义键:

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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)


mos*_*qur 8

我发现这个解决方案更直观,特别是如果你以后想根据列的长度做一些事情。

df['length'] = df['name'].str.len()
df.sort_values('length', ascending=False, inplace=True)
Run Code Online (Sandbox Code Playgroud)

现在您的数据框将有一个名称为列length的字符串长度值的列name,整个数据框将按降序排序。