我想按名称长度排序。sort_values似乎没有key参数,所以我不确定如何实现这一点。下面是一个测试df:
sort_values
key
import pandas as pd df = pd.DataFrame({'name': ['Steve', 'Al', 'Markus', 'Greg'], 'score': [2, 4, 2, 3]})
lsmepo6l1#
您可以将len创建的index的reindex与sort_values一起使用:
len
index
reindex
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
7gyucuyw2#
使用DataFrame.sort_values,我们可以传递一个匿名(lambda)函数来计算字符串长度(使用.str.len() Series方法)给**key**参数:
DataFrame.sort_values
.str.len()
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
lf3rwulv3#
我发现这个解决方案更直观,特别是当你想根据列长做一些事情的时候。
df['length'] = df['name'].str.len() df.sort_values('length', ascending=False, inplace=True)
现在,您的 Dataframe 将有一个名为length的列,其中包含来自name列的字符串长度值,整个 Dataframe 将按降序排序。
length
name
5w9g7ksd4#
@jezrael的回答很棒,解释得很好,下面是最终的结果:
index_sorted = df.name.str.len().sort_values(ascending=True).index df_sorted = df.reindex(index_sorted) df_sorted = df_sorted.reset_index(drop=True)
mec1mxoz5#
一个奇特而简约的解决方案:
df.iloc[df.agg({"name":len}).sort_values('name').index] name score 1 Al 4 3 Greg 3 0 Steve 2 2 Markus 2
5条答案
按热度按时间lsmepo6l1#
您可以将
len
创建的index
的reindex
与sort_values
一起使用:7gyucuyw2#
使用
DataFrame.sort_values
,我们可以传递一个匿名(lambda)函数来计算字符串长度(使用.str.len()
Series方法)给**key
**参数:lf3rwulv3#
我发现这个解决方案更直观,特别是当你想根据列长做一些事情的时候。
现在,您的 Dataframe 将有一个名为
length
的列,其中包含来自name
列的字符串长度值,整个 Dataframe 将按降序排序。5w9g7ksd4#
@jezrael的回答很棒,解释得很好,下面是最终的结果:
mec1mxoz5#
一个奇特而简约的解决方案: