使用具有“年”和“月”信息的两个独立系列构建热图

Posted

技术标签:

【中文标题】使用具有“年”和“月”信息的两个独立系列构建热图【英文标题】:Building Heatmap with two separate series having "Year" and "Month" information 【发布时间】:2021-08-22 20:54:31 【问题描述】:

我正在处理数据集

d = 'date_added_month': ['February', 'December', 'October', 'December', 'April','December', 'March', 'April'], 
     'date_added_year': [2014, 2012, 2008, 2009, 2010, 2011, 2012, 2013],
    'title': ['apple', 'ball', 'cat', 'dog', 'elephant', 'fish', 'goat', 'horse'],
    'titles_count': [0,0,0,0,0,0,0,0]
df = pd.DataFrame(data=d)

我想构建一个 X 轴为年份、Y 轴为月份的热图,并计算特定月份和年份的标题数量。如何按月和年计算标题数量?

我已经按月和年计算了标题,如下所示:

grp_by_yr = df.groupby("date_added_year").size()
grp_by_mn =  df.groupby("date_added_month").size()

但我不确定如何汇总这两个信息。

【问题讨论】:

请不要发布您的数据的屏幕截图,而是可以复制并用于查找答案的文本。谢谢。 @werner 我意识到我不应该发布不可重现的代码。但我现在编辑了问题,请看一下。 我想你在找pd.crosstab 【参考方案1】:

只需先用 1 填充 titles_count,因为它们表示每行 1 个计数。

release_dist_df['titles_count'] = 1

然后像这样旋转表格 -

heatmap1_data = pd.pivot_table(release_dist_df, values='titles_count', 
                     index=['date_added_month'], 
                     columns='date_added_year')

然后使用 seaborn 进行绘图 -

sns.heatmap(heatmap1_data, cmap="YlGnBu")

更新

根据要求更新分组

import pandas as pd

d = 'date_added_month': ['February', 'February', 'December', 'October', 'December', 'April','December', 'March', 'April'],
     'date_added_year': [2014, 2014, 2012, 2008, 2009, 2010, 2011, 2012, 2013],
    'title': ['apple', 'apple-new', 'ball', 'cat', 'dog', 'elephant', 'fish', 'goat', 'horse'],
    'titles_count': [0,0,0,0,0,0,0,0,0]
df = pd.DataFrame(data=d)
df['titles_count'] = 1

group_by_both = df.groupby(["date_added_year", "date_added_month"]).agg('titles_count': 'sum')

heatmap1_data = pd.pivot_table(group_by_both, values='titles_count',
                     index=['date_added_month'],
                     columns='date_added_year')
print(heatmap1_data)

import seaborn as sns
sns_plot = sns.heatmap(heatmap1_data, cmap="YlGnBu")

我还添加了一个数据点来表明聚合正在发挥作用(2014 年 2 月)。

【讨论】:

我实际上想计算特定月份和年份的标题数量,而不仅仅是标题是否存在。我已将代码编辑为可重现的男性,请看一下。 您可以通过group_by_both = df.groupby(["date_added_year", "date_added_month"]).count() 这样做,这将创建嵌套组。 感谢@Yatharth Ranjan,使用 group_by_both 后可以使用

以上是关于使用具有“年”和“月”信息的两个独立系列构建热图的主要内容,如果未能解决你的问题,请参考以下文章

AMD RX6800系列评测出,RTX 3080卒,享年两个月

Oracle系列:安装

使用R中的ggplot定制热图外观

#私藏项目实操分享#愚公系列2022年02月 阿里云 无影云桌面产品测评

DevExpress Winforms使用技巧与窍门集合(2020年5月汇总)

DevExpress Winforms使用技巧与窍门集合(2020年5月汇总)