如何对Pandas中列表格式的列值进行按字母排序?
如何对DataFrame行内逗号分隔的字符串按字母排序
你之前用sort_values()没效果,是因为这个方法是对整列的行数据排序,而非对每行内部的字符串内容做排序。要实现行内物品名称按字母排序,得把每行的字符串拆分成列表,排序后再合并回去,具体操作如下:
解决步骤
- 拆分字符串:用
str.split(',')把每行的bundle列按逗号拆分成独立物品的列表。 - 清理空格:拆分后每个物品可能带首尾空格(比如示例里逗号前后的空格差异),用列表推导式配合
strip()去掉多余空格。 - 排序列表:对清理后的物品列表用
sorted()函数按字母顺序排序。 - 合并字符串:把排序后的列表重新用逗号拼接成字符串。
完整代码示例
针对你的测试数据,代码可以这么写:
import pandas as pd testdf = pd.DataFrame({'sales_order': ['so-1','so-2'], 'Inv_item': ['Revolve 3 Clean 110cm,Resolution 3 Glare - 120bp- Normal viscosity', 'Resolution 3 Glare - 120bp - Normal viscosity,Revolve 3 Clean 110cm']}) # 处理每行的Inv_item列:拆分→去空格→排序→合并 testdf['sorted_Inv_item'] = testdf['Inv_item'].apply( lambda x: ','.join(sorted([item.strip() for item in x.split(',')])) ) print(testdf)
输出结果
运行后会生成新列sorted_Inv_item,两行的内容会统一为按字母排序后的结果:
sales_order Inv_item sorted_Inv_item 0 so-1 Revolve 3 Clean 110cm,Resolution 3 Glare - 12... Resolution 3 Glare - 120bp- Normal viscosity,... 1 so-2 Resolution 3 Glare - 120bp - Normal viscosity,... Resolution 3 Glare - 120bp - Normal viscosity,...
额外说明
- 如果需要忽略大小写排序,把
sorted()改成sorted(key=str.lower)即可。 - 3000行数据用这个方法完全没问题,
apply配合向量化操作的效率足够支撑。
内容的提问来源于stack exchange,提问作者DrizzTheStampede
相关产品推荐
相关产品推荐

