You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对pandas透视表DataFrame的星期字段按自然顺序排序?

问题原因

你遇到KeyError: 'day_of_week'的核心原因是该透视表的day_of_week属于多级行索引的一级,并非普通数据列,直接按列名访问无法匹配到对应字段。而最初直接排序得到乱序结果,是因为字符串默认按字典序排列,不符合星期的自然顺序。


解决方案

这里提供两种常用实现方式,都不会丢失任何星期数据:

方式1:直接修改索引属性排序(无需改动原有表结构)

import pandas as pd

# 定义星期的正确排序规则
week_order = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

# 给索引中day_of_week层级设置有序分类类型
df3.index = df3.index.set_levels(
    pd.Categorical(df3.index.get_level_values('day_of_week').unique(), categories=week_order, ordered=True),
    level='day_of_week'
)

# 按day_of_week索引层级排序即可得到正确结果
df4 = df3.sort_index(level='day_of_week')

方式2:索引转列处理(适合后续需要频繁操作星期字段的场景)

import pandas as pd

week_order = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

# 将所有行索引重置为普通数据列
df_reset = df3.reset_index()

# 此时day_of_week为普通列,可正常设置有序分类
df_reset['day_of_week'] = pd.Categorical(df_reset['day_of_week'], categories=week_order, ordered=True)

# 按字段排序
df_sorted = df_reset.sort_values(by='day_of_week')

# 如果需要保留原透视表的多级索引结构,排序后重新设置索引即可
df4 = df_sorted.set_index(['member_casual', 'rideable_type', 'day_of_week'])

两种方案最终输出的df4都会按照指定的星期顺序排列,所有原有数据都会完整保留。


内容的提问来源于stack exchange,提问作者Nikhil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:48:01