我正在尝试根据另一列中的值对表格单元格进行着色。
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中,将其分开 那个关键字。
答案 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)