2017-02-28 66 views
3

我想按名称长度排序。 sort_values似乎没有key参数,所以我不确定如何完成此操作。下面是测试DF:按字符串长度对数据框排序

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

可能的复制一个列](https://stackoverflow.com/questions/46177362/sort-dataframe-by-length-of-string-in-a-column) –

+0

@jezrael请阅读我的理由。我明确提到它:https://stackoverflow.com/questions/46177362/sort-dataframe-by-length-of-string-in-a-column#comment79318016_46177362 –

+0

那里有更多的选项。如果没有,你可以编辑这个答案并包含所有其他解决方案。 –

回答

7

您可以使用由len创建Seriesindexreindexsort_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 
在字符串的长度[排序数据帧的
+0

伟大的答案,我也尝试过这种方法列表(按列表长度排序DataFrame),因为'.str.len()'与问题中提到的列表一起工作**用于计算pandas数据框列表中列表长度的Pythonic方法**在这[链接](https://stackoverflow.com/questions/41340341/pythonic-way-for-calculating-length-of-lists-in-pandas-dataframe-column) – otayeby