在数据框python的每一行中按字母顺序对单词进行排序
Posted
技术标签:
【中文标题】在数据框python的每一行中按字母顺序对单词进行排序【英文标题】:Sort words alphabetically in each row of a dataframe python 【发布时间】:2018-12-29 04:48:23 【问题描述】:我在数据框中有一列包含字符串值,如下所示:
sortdf=pd.DataFrame(data= 'col1':["hello are you","what happenend","hello you there","issue is in our program","whatt is your name"])
我想按字母顺序对元素中的每个单词进行排序。
期望的输出:
col1
0 are hello you
1 happenend what
2 hello there you
3 is in issue our program
4 is name whatt your
我尝试使用以下代码进行此操作:
sortdf['col1']. sort()
但是这段代码不起作用。
【问题讨论】:
【参考方案1】:将pd.Series.apply
与匿名lambda
函数一起使用:
sortdf['col1'] = sortdf['col1'].apply(lambda x: ' '.join(sorted(x.split())))
pd.Series.sort
不合适,因为 (a) 这对系列元素而不是系列元素中的单词进行排序,并且 (b) 该方法已被弃用,取而代之的是 sort_values
。
这个想法是将一个字符串拆分成一个单词列表,按字母顺序排序,然后重新连接成一个字符串。
结果:
col1
0 are hello you
1 happenend what
2 hello there you
3 in is issue our program
4 is name whatt your
或者,列表推导可能更有效:
sortdf['col1'] = [' '.join(sorted(x)) for x in sortdf['col1'].str.split()]
【讨论】:
也许比 apply 更快?list(map(lambda x : ' '.join(sorted(x)),sortdf.col1.str.split().tolist()))
@Wen,是的,可能。我添加的列表理解应该比map
+ lambda
更快。以上是关于在数据框python的每一行中按字母顺序对单词进行排序的主要内容,如果未能解决你的问题,请参考以下文章