我想在我的seaborn热图中添加列(其他年份的数据)。 这是我正在使用的代码:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.DataFrame({'Month': ['January','February','March','April','May','June','July','August','September','October','November','December',
'January','February','March','April','May','June','July','August','September','October','November','December'],
'Year': [2011,2011,2011,2011,2011,2011,2011,2011,2011,2011,2011,2011,
2012,2012,2012,2012,2012,2012,2012,2012,2012,2012,2012,2012,],
'hPM2.5': [18,17,21,14,7,7,8,7,9,11,23,5,
18,17,21,14,7,7,8,7,9,11,23,5,
18,17,21,14,7,7,8,7,9,11,23,5,
18,17,21,14,7,7,8,7,9,11,23,5]})
cats = ['January','February','March','April','May','June',
'July','August','September','October','November','December']
df['Month'] = df['Month'].astype('category',
ordered=True,
categories=cats)
df2 = df.pivot("Month", "Year", "hPM2.5")
sns.heatmap(df2, annot=True)
因此,为了尝试获取2012年数据,数据透视表似乎需要24个Jan,Feb等以及2011年,2011年...... 2012年,2012年的条目...否则我得到: ValueError:数组必须全长相同。但是当我重复1月,2月等时,它会给出这个重复值错误。如果不使用seaborn示例给出的数据透视表,我似乎无法使热图工作。我怎样才能解决这个问题呢?
答案 0 :(得分:1)
答案 1 :(得分:0)
据我了解您的问题,您不希望每年重复1月至12月,并在输入数据中复制每个月的年份。如果是这种情况,那么您真正需要做的就是将其输入到.pivot()
中的表示中。在对输入数据进行一点清理后,df2.to_dict(orient="list")
会给出:
{2011: [18, 17, 21, 14, 7, 7, 8, 7, 9, 11, 23, 5],
2012: [18, 17, 21, 14, 7, 7, 8, 7, 9, 11, 23, 5]}
然后你可以这样做:
df = pd.DataFrame({2011: [18, 17, 21, 14, 7, 7, 8, 7, 9, 11, 23, 5],
2012: [18, 17, 21, 14, 7, 7, 8, 7, 9, 11, 23, 5]}, index=cats)
sns.heatmap(df, annot=True)