如何使用style.applymap为数据框中的行着色?

问题描述

我想为DataFrame对象ggplot() + geom_line(aes(x=month,y=cumsum(total),colour='FY19',group=fiscal_year),fy1920 %>% filter(fiscal_year=='19')) + geom_line(aes(x=month,colour='FY20',fy1920 %>% filter(fiscal_year=='20')) + scale_colour_discrete(name='fiscal_year',labels=c("FY19","FY20")) 中的“总计”行和“总计”列上色,为此,我尝试了以下操作:

df

但是,当编译器到达代码的最后一行时,会出现以下错误:

import pandas as pd

# Function to set background highlight colour.
def bg_colour (val):
    colour = '#ffff00'
    return 'background-color: %s' % colour

df = pd.DataFrame({'Category': ['A','B','C','D','Grand Total'],'Total': [1,2,3,4,10]})
t1 = df.style.applymap(bg_colour,subset = ['Total'])
dfT = df.T
dfT = dfT.style.applymap(bg_colour,subset = [4])
t1T = t1.T

据我了解,--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-48-c0c380b9c518> in <module> 12 dfT = dfT.style.applymap(bg_colour,subset = [4]) 13 display(dfT) ---> 14 t1T = t1.T AttributeError: 'Styler' object has no attribute 'T' 隐式地将DataFrame转换为Styler类型的对象,该对象无法作为DataFrame进行进一步处理。

问题1 :DataFrame对象的行和列如何着色?

问题2 :如何将Styler类型的对象转换为DataFrame类型的对象?

解决方法

Style对象返回一个HTML格式的字符串,因此我认为将其转换为数据框并不直接。代替applymap,我将重写函数,以便它将列/行作为参数并使用apply。像这样:

def bg_colour_col (col):
    colour = '#ffff00'
    return ['background-color: %s' % colour 
                if col.name=='Total' or i==4   # color column `Total` or row `4`
                else ''
             for i,x in col.iteritems()]

df.style.apply(bg_colour_col)

输出:

enter image description here

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...