Pandas groupby:在创建具有两列的groupby时,如何按正确的顺序对工作日进行排序?

Pandas groupby:在创建具有两列的groupby时,如何按正确的顺序对工作日进行排序?,pandas,seaborn,heatmap,pandas-groupby,Pandas,Seaborn,Heatmap,Pandas Groupby,以下数据框包含一年中每小时的kWh值 cons2016.head() Date Hour kWh Month Weekday 0 2016-01-01 00:00 71.48 January Friday 1 2016-01-01 01:00 65.32 January Friday 2 2016-01-01 02:00 65.38 January Friday 3 2016-01-01 03:00 6

以下数据框包含一年中每小时的kWh值

cons2016.head()

    Date        Hour    kWh     Month   Weekday
0   2016-01-01  00:00   71.48   January Friday
1   2016-01-01  01:00   65.32   January Friday
2   2016-01-01  02:00   65.38   January Friday
3   2016-01-01  03:00   62.44   January Friday
4   2016-01-01  04:00   57.56   January Friday
我想从这个数据框中创建一个海生热图,在垂直轴上按正确的顺序排列,在水平轴上按小时排列。因此,我建议groupby:

weekdayhour = cons2016.groupby(["Weekday", "Hour"]).mean()
weekdayhour = weekdayhour.reset_index()
weekdayhour.head()

    Weekday Hour    kWh
0   Friday  00:00   61.188113
1   Friday  01:00   57.231698
2   Friday  02:00   55.818679
3   Friday  03:00   55.074151
4   Friday  04:00   55.049811
但现在热图上的工作日也是按字母顺序排列的:

heat_weekdayhour = weekdayhour.pivot(index="Weekday", columns="Hour", values="kWh")
sns.heatmap(heat_weekdayhour)
我怎样才能正常安排工作日,从周一到周日?我尝试添加.reindex,如下所示:

weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
weekdayhour = cons2016.groupby(["Weekday", "Hour"]).mean().reindex(labels=weekdays)
但这给了我TypeError:预期的元组,得到str

谢谢你的帮助

使用分类

更多信息:

weekdayhour.Weekday
0    Friday
1    Friday
2    Friday
3    Friday
4    Friday
Name: Weekday, dtype: category
Categories (7, object): [Monday < Tuesday < Wednesday < Thursday < Friday < Saturday < Sunday]

非常感谢。所以根本不需要groupby!
weekdayhour.Weekday
0    Friday
1    Friday
2    Friday
3    Friday
4    Friday
Name: Weekday, dtype: category
Categories (7, object): [Monday < Tuesday < Wednesday < Thursday < Friday < Saturday < Sunday]
import pandas as pd

#You first create your list in the order you want it
days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

#Using Categorical() function to set the order according to how it is arranged above
df["DOTW_Appointment"] = pd.Categorical(df.DOTW_Appointment, categories=days, ordered=True)