熊猫造型使用条件

时间:2017-12-14 19:24:36

标签: python pandas

我正在尝试根据另一列中的值对表格单元格进行着色。

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')

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

也许我想要的目前不可能?来自文档:

  

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

     

如果样式函数使用子集或轴关键字参数,   考虑将你的功能包装在functools.partial中,将其分开   那个关键字。

1 个答案:

答案 0 :(得分:4)

您需要为设置样式返回颜色的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)

one

two