如何按字符串长度降序排序Pandas DataFrame序列中的列表元素?
解决方案:对Pandas DataFrame列表列按字符串长度降序排序
要实现对serie列中每个列表元素按字符串长度从长到短排序的需求,用Pandas的apply()方法结合自定义排序逻辑就能轻松搞定,具体步骤如下:
- 首先构造你的示例DataFrame(如果已经有现成的可以跳过这步):
import pandas as pd data = { 'brand': ['&tradition', 'Dove', 'Adidas', 'Vasaline', 'Boska'], 'serie': [ ['&tradition flowerpot', '&tradition spinning pen', '&tradition test'], ['dove deeply nourishing', 'dove men+care'], ['adidas ace', 'adidas gel'], ['vaseline advanced repair', 'vaseline men'], ['boska dutch', 'boska test2', 'boska testing'] ] } df = pd.DataFrame(data)
- 核心处理代码:
我们用apply()遍历serie列的每个列表,然后用sorted()函数,指定排序的key为字符串的长度,并且设置reverse=True实现降序(最长优先):
df['serie'] = df['serie'].apply(lambda x: sorted(x, key=lambda s: len(s), reverse=True))
- 验证结果:
查看Boska行的处理结果,完全符合你的期望:
print(df[df['brand'] == 'Boska']['serie'].values[0]) # 输出:['boska testing', 'boska dutch', 'boska test2']
额外优化:处理异常情况
如果你的数据里可能存在空列表、None值或者空字符串,可以在排序前先做过滤,避免出现意外报错:
df['serie'] = df['serie'].apply( lambda x: sorted([s for s in x if s is not None and s.strip()], key=lambda s: len(s), reverse=True) if isinstance(x, list) else x )
这样就能确保所有有效字符串都按长度降序排列啦!
内容的提问来源于stack exchange,提问作者rutvanelk
相关产品推荐
相关产品推荐

