Pandas groupby: Как отсортировать дни недели в правильном порядке при создании groupby с двумя столбцами? - PullRequest
0 голосов
/ 02 декабря 2018

Следующий кадр данных содержит значения (кВтч) для каждого часа года.

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

Я хочу создать тепловую карту Seaborn из этого кадра данных (дни недели в правильном порядке ввертикальная ось и часы по горизонтальной оси).Итак, я сгруппировался:

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)

weekday order wrong in heatmap

Как получить рабочие дни в обычном порядке, с понедельника по воскресенье?Я попытался добавить .reindex следующим образом:

weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
weekdayhour = cons2016.groupby(["Weekday", "Hour"]).mean().reindex(labels=weekdays)

Но это дает мне TypeError: Expected tuple, got str

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 02 декабря 2018

Использование Categorical

weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
weekdayhour.Weekday = pd.Categorical(weekdayhour.Weekday,categories=weekdays)
weekdayhour = weekdayhour.sort_values('Weekday')
  Weekday   Hour    kWh
0  Friday  00:00  71.48
1  Friday  01:00  65.32
2  Friday  02:00  65.38
3  Friday  03:00  62.44
4  Friday  04:00  57.56

Подробнее:

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]
...