在python中热映射选定列的最简单方法?

时间:2020-09-30 20:50:36

标签: python pandas seaborn heatmap

zero

仅将热图应用于值列的简单方法是什么?我想避免一年被映射。

df['is_OpenSaturday']=np.where(df.Saturday.str.contains('0\:0\-0\:0|^0'),0,1)

    restaurant_id      Monday     Tuesday   Wednesday    Thursday      Friday  \
0             1   11:0-20:0   11:0-20:0   11:0-20:0   11:0-20:0   11:0-22:0   
1             2  11:30-22:0  11:30-22:0  11:30-22:0  11:30-22:0  11:30-22:0   
2             3  11:30-21:0  11:30-22:0  11:30-21:0  11:30-21:0  11:30-21:0   

    Saturday       Sunday  is_OpenSaturday  
0  11:0-22:0    11:0-17:0                1  
1    0:0-0:0  16:30-21:30                0  
2          0   11:30-21:0                0  

相同的问题,但要分别针对价值和年龄-即我希望每个列分别进行热映射并缩放至该列(因此,年龄不会显示为一个极端,而另一个极端为值)。

我有很多复杂的代码片段来实现此目的,但是很多时候我只是将粘贴复制到excel中,因为它的速度更快...是否有快速,干净的方法在python中进行这种基本的选择性热映射?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您在笔记本电脑上或可以渲染HTML的地方工作,则可以在w / style上使用数据框的background_gradient访问器。为此,Seaborn使生成颜色图变得非常容易。

您可以使用subset参数指定要将颜色映射应用到的列。

import pandas as pd
import seaborn as sns

df2 = pd.DataFrame({"name": ['a','b','c','d','e'],
                  "year": ['2012','2013','2010','2008','2011'],
                  "value": ['254','220','275','283','323'],
                    "age": ['42','32','27','28','32']})

df2["value"] = pd.to_numeric(df2["value"])
df2["age"] = pd.to_numeric(df2["age"])

cm = sns.light_palette("green", as_cmap=True)
df2.style.background_gradient(cmap=cm, subset=["value", "age"])

enter image description here

如果您希望使用不同的颜色或为列指定单独的vmin / vmax,则可以简单地多次调用background_gradient

green_cm = sns.light_palette("green", as_cmap=True)
blue_cm = sns.light_palette("blue", as_cmap=True)

(df2.style
 .background_gradient(cmap=blue_cm, subset="value", vmin=200, vmax=400)
 .background_gradient(cmap=green_cm, subset="age", vmin=0, vmax=50))

enter image description here

相关问题