Python中pivot操作后如何对DataFrame除索引列外的月份列按序排列
解决思路
你之前的代码报错是因为sort_values是用于按列值对行排序的API,无法实现调整列顺序的需求,调整列顺序直接重组列名列表后重索引即可,具体实现如下:
代码实现
# 1. 拆分固定保留顺序的列和需要动态排序的月份列 fixed_cols = ['loc', 'dept'] month_cols = [col for col in df.columns if col not in fixed_cols] # 2. 把月份字符串转为datetime对象作为排序依据,自动按时间升序排列 sorted_month_cols = sorted(month_cols, key=lambda x: pd.to_datetime(x, infer_datetime_format=True)) # 3. 重组列顺序并重新赋值 df = df[fixed_cols + sorted_month_cols]
方案说明
- 完全动态适配:后续新增任意月份(如
Sep21、Jan22等)都会自动按照时间先后排序,无需手动修改排序规则 - 兼容性强:支持
Jun21(短写月份)、July21(全写月份)等多种常见的月份+年份的字符串格式,无需额外做字符串预处理
内容的提问来源于stack exchange,提问作者RCN
相关产品推荐
相关产品推荐

