使用Dataframes style.apply基于比较值进行突出显示

时间:2018-09-27 02:33:43

标签: python html css pandas dataframe

在我的代码中,我使用df.style.applymap()将HTML呈现到我的Intranet网页上。 我有下面的代码对我来说很好用(2列传递给我的函数highlight_vals)。

Map.update

现在,我想做一个类似的函数(或者曾经使用当前的highlight_vals),以便在以下行的条件下实现比较突出显示:
   如果ValinColumn1> 0.25 * ValinColumn2:#(用于同一行/记录)
    返回'background-color:%s'%颜色#Yellow / Highlights。


我在 views.py 中使用上述功能:
httresp + = df.style.applymap(highlight_vals,subset = [col1,col2])

2 个答案:

答案 0 :(得分:1)

您需要使用apply(axis=1)遍历行:

def highlight_vals(row, cols=['A', 'B'], color='green'):
    a, b = cols
    styles = {col: '' for col in row.index}
    if row[a] > 0.25 * row[b]:
        styles[a] = 'background-color: %s' % color
        styles[b] = 'background-color: %s' % color
    return styles

df.style.apply(lambda x: highlight_vals(x, cols=['B', 'E']), axis=1)

enter image description here

答案 1 :(得分:0)

从这个问题: Difference between map, applymap and apply methods in Pandas 我认为您需要的是功能适用。它可以在多个列上工作。 您正在使用面向整个数据框的applymap(但是您可以通过使用df.style从数据框中选择一列来解决此问题)

这是一个玩具示例:

>>> df = pd.DataFrame([[1,2],[3,4]], columns=['A', 'B'])
>>> df['sum_A_B']=df.apply(lambda x: x['A'] + x['B'], axis=1)
>>> df
   A  B  sum_A_B
0  1  2        3
1  3  4        7