Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 排序不适用于我的热图_Python_Python 2.7_Pandas_Matplotlib_Seaborn - Fatal编程技术网

Python 排序不适用于我的热图

Python 排序不适用于我的热图,python,python-2.7,pandas,matplotlib,seaborn,Python,Python 2.7,Pandas,Matplotlib,Seaborn,我有以下数据帧df_imd(给出了一个小摘录): 运行以下代码后,我无法理解为什么工作日不在热图中排序: norm = plt.Normalize(df_imd["daily_avg_count"].values.min(), df_imd["daily_avg_count"].values.max()) colors = plt.cm.YlGnBu(norm(df_imd["daily_avg_count"])) df_imd.loc[df_imd['weekday'] == "1", 'w

我有以下数据帧
df_imd
(给出了一个小摘录):

运行以下代码后,我无法理解为什么工作日不在热图中排序:

norm = plt.Normalize(df_imd["daily_avg_count"].values.min(), df_imd["daily_avg_count"].values.max())
colors = plt.cm.YlGnBu(norm(df_imd["daily_avg_count"]))

df_imd.loc[df_imd['weekday'] == "1", 'weekday'] = "Monday"
df_imd.loc[df_imd['weekday'] == "2", 'weekday'] = "Tuesday"
df_imd.loc[df_imd['weekday'] == "3", 'weekday'] = "Wednesday"
df_imd.loc[df_imd['weekday'] == "4", 'weekday'] = "Thursday"
df_imd.loc[df_imd['weekday'] == "5", 'weekday'] = "Friday"
df_imd.loc[df_imd['weekday'] == "6", 'weekday'] = "Saturday"
df_imd.loc[df_imd['weekday'] == "7", 'weekday'] = "Sunday"

sorter = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
df_imd.weekday = df_imd.weekday.astype("category")
df_imd.weekday.cat.set_categories(sorter, inplace=True)

iterables = [df_imd['id'].unique(),df_imd['weekday'].unique()]
df = df_imd.set_index(['id','weekday'])
df = df.reindex(index=pd.MultiIndex.from_product(iterables, names=['id', 'weekday']), fill_value=0).reset_index()

df = df.pivot("weekday", "id", "daily_avg_count")

plt.figure(figsize=(12,8))
ax = sns.heatmap(df, annot=False, linewidths=.5, cmap="YlGnBu")
plt.show()
我看到的不是“星期一”、“星期二”等,而是“星期三”、“星期一”等。

您需要更改:

df_imd.weekday = df_imd.weekday.astype("category")
df_imd.weekday.cat.set_categories(sorter, inplace=True)
致:

对于有序范畴

我尝试进一步改进解决方案:

df_imd.loc[df_imd['weekday'] == "1", 'weekday'] = "Monday"
df_imd.loc[df_imd['weekday'] == "2", 'weekday'] = "Tuesday"
df_imd.loc[df_imd['weekday'] == "3", 'weekday'] = "Wednesday"
df_imd.loc[df_imd['weekday'] == "4", 'weekday'] = "Thursday"
df_imd.loc[df_imd['weekday'] == "5", 'weekday'] = "Friday"
df_imd.loc[df_imd['weekday'] == "6", 'weekday'] = "Saturday"
df_imd.loc[df_imd['weekday'] == "7", 'weekday'] = "Sunday"

sorter = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
df_imd.weekday = df_imd.weekday.astype("category")
df_imd.weekday.cat.set_categories(sorter, inplace=True)
致:


你能解释一下为什么我的解决方案不起作用吗?谢谢。在我看来,你的代码使用默认的分类,它不是有序的。未排序的类别是按字母顺序排序的,因此尽管您使用
set\u对它们进行排序,但仍处于final状态的类别是未排序的。
df_imd.weekday = df_imd.weekday.astype("category", ordered=True, categories=sorter)
df_imd.loc[df_imd['weekday'] == "1", 'weekday'] = "Monday"
df_imd.loc[df_imd['weekday'] == "2", 'weekday'] = "Tuesday"
df_imd.loc[df_imd['weekday'] == "3", 'weekday'] = "Wednesday"
df_imd.loc[df_imd['weekday'] == "4", 'weekday'] = "Thursday"
df_imd.loc[df_imd['weekday'] == "5", 'weekday'] = "Friday"
df_imd.loc[df_imd['weekday'] == "6", 'weekday'] = "Saturday"
df_imd.loc[df_imd['weekday'] == "7", 'weekday'] = "Sunday"

sorter = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
df_imd.weekday = df_imd.weekday.astype("category")
df_imd.weekday.cat.set_categories(sorter, inplace=True)
sorter = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
#create dict for maping weekdays
d = dict(zip(np.arange(1,len(sorter)+1).astype(str), sorter))
print (d)
{'7': 'Sunday', '1': 'Monday', '6': 'Saturday', 
'5': 'Friday', '2': 'Tuesday', '3': 'Wednesday', '4': 'Thursday'}

df_imd['weekday'] = df_imd['weekday'].map(d)
df_imd.weekday = df_imd.weekday.astype("category", ordered=True, categories=sorter)