如何仅使用存在的值执行groupby?

时间:2017-06-10 11:14:59

标签: python pandas dataframe

我有一个这样的数据框:

Platform     Genre      Score
PC           Action     9
PS           Adventure  8.5
Xbox         Action     9.5....

数据框很大。我想想象一个热图,它显示x轴上的平台,y上的类型和得分作为值。

所以我试过这个:

abc=games.groupby(['platform','genre'])['score'].mean().reset_index()
abc=abc.pivot('platform','genre','score')
sns.heatmap(abc)

现在的问题是,由于并非所有平台都拥有所有类型的游戏,因此生成的数据帧具有大量 NaN 值。如果我使用 abc.dropna(),则会删除所有行。

那么我该怎么办才能只存在非NaN的相关值?

1 个答案:

答案 0 :(得分:0)

正如JoeCondron所说,枢轴是以这种方式给你的,因为它正在创建一个网格。但是,我怀疑你希望它在你的热图中非常清楚,因为如果你创建一个平台X类型网格,那么这些点将会存在 - 只有那个空值。

sns.heatmap已经为你做了,但是默认的值会给你一个蓝盒子,这可能是你不在乎的。查看seaborn docs,然后在底部显示如何屏蔽不需要的数据。

在您的情况下,这应该为您提供"空白"只要你的背景是白色的盒子。这适用于我使用Jupyter Notebook。

mask = abc.isnull()
with sns.axes_style("white"):
    sns.heatmap(abc, mask=mask)
plt.show()

据说,如果你有一个更柔和的灰色背景和颜色,它可能更容易在眼睛上。但是,我认为这可以达到你最终想要的效果。