熊猫使用条件样式

杰夫·蒂尔顿

我试图根据另一列中的值为表格单元格上色。

import pandas as pd
df = pd.DataFrame({'a':[1,2,3],'b':[1.5,3,6],'c':[2.2,2.9,3.5]})
df

    a   b   c
0   1   1.5 2.2
1   2   3.0 2.9
2   3   6.0 3.5

例如,在上面的df中,如果c> b,我希望b染成红色。因此,单元格df [0,b]将被突出显示,但其他单元都不突出。

我已经进行了多次尝试,但总的来说,如下所示

def highlight(val1,val2):
    color = 'red' if val1 < val2 else 'black'
    return 'color: %s' % color

df.style.apply(lambda x: highlight(x.data.b,x.data.c), axis = 1,subset=['b'])

TypeError: ('memoryview: invalid slice key', 'occurred at index 0')

我没有在文档中看到任何示例他们通常在单个列上使用条件,例如突出显示一列或整个df中的最大值或最小值。

也许我想要的目前无法实现?从文档中:

目前仅支持基于标签的切片,不支持位置切片。

如果您的样式函数使用子集或axis关键字参数,请考虑将函数包装在functools.partial中,以分隔该关键字。

耶斯列尔

您需要为设置的样式返回颜色的DataFrame。因此需要创建具有相同索引和具有默认值的列的新df-在此处background-color: red,然后根据条件更改值:

def highlight(x):
    c1 = 'background-color: red'
    c2 = 'background-color: black' 
    #if want set no default colors 
    #c2 = ''  
    m = x['c'] > x['b'] 
    df1 = pd.DataFrame(c2, index=x.index, columns=x.columns)
    df1.loc[m, 'b'] = c1
    return df1

df.style.apply(highlight, axis=None)

一

二

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章