如何按照指定顺序对DataFrame中存储列表的列进行元素排序
实现方法
核心思路
- 先基于你给定的月份优先级顺序构造权重映射字典,每个月份对应唯一的排序权重,排序时按权重从小到大排列
- 对
Column 2的每一行列表元素,调用sorted方法指定排序key为上述权重即可
完整代码示例
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'Column 1': [1,2,3,4,5,6,7], 'Column 2': [ ['jan'], ['jan','feb'], ['feb','jan'], ['mar','april','jan'], ['jan','mar','april'], ['jan','feb','mar'], ['jan','feb','mar'] ] }) # 定义指定排序顺序,注意如果你原需求里的是march、示例里是mar,根据实际拼写调整对应值即可 custom_order = ['oct' ,'nov' ,'dec' ,'jan' ,'feb' ,'mar' ,'april'] # 构造排序权重字典 order_weight = {month: idx for idx, month in enumerate(custom_order)} # 对Column2每行排序生成Column3 df['Column 3'] = df['Column 2'].apply(lambda x: sorted(x, key=lambda item: order_weight[item])) # 输出结果验证 print(df)
注意事项
- 如果你的数据中存在不在
custom_order里的月份值,可以把排序key改成order_weight.get(item, 999),这样不存在的元素会默认排在列表末尾,避免报错 - 如果你需要降序排序,给sorted方法加
reverse=True参数即可
内容的提问来源于stack exchange,提问作者Mr_question
相关产品推荐
相关产品推荐

