根据 Python Pandas 中列中的值突出显示 DataFrame 中的行

Highlight rows from a DataFrame based on values in a column in Python Pandas

我一直在尝试根据多种条件突出显示 pandas 数据框中的某些行。

我希望当目标列中的字符串与函数中定义的条件匹配时,整行将突出显示。

我尝试了 .style.apply 方法的不同组合,但它一直给我以下错误:

ValueError: style is not supported for non-unique indicies.

这是代码:

def highlight_rows(s):        
    if s['my_column'] == 'some_text':
        return 'background-color: green'
    elif s['my_column'] == 'somedifferent_text':
        return 'background-color: blue'

df.style.apply(highlight_rows, axis = 0)

我正在使用 Python 3.6.5 和 Pandas 0.22.0

知道我做错了什么吗?

我应该传递不同的参数还是进行不同的循环?

谢谢

假设 s 等于您的数据框: 试试这个:

def file():
    styled = df.style.apply(highlight_rows, axis = 0)
    f = open('new_file.html', 'w')
    html = (styled.render())
    f.write(html)
    f.close()

def highlight_rows(s):        
    if s.my_column == 'some_text':
        return ['background-color: green'] * s.size
    elif s.my_column == 'somedifferent_text':
        return ['background-color: blue'] * s.size

apply 方法根据 axis=0axis=1 提取每一列或每一行。然后您可以为行或列中的每个单元格添加任何样式。如果你想通过方法传递你的样式,你需要为数组的每个元素分配方法表达式。否则,它必须是 None 值。

def highlight_rows(s):
    con = s.copy()
    con[:] = None
    if (s['my_column'] == 'some_text'):
        con[:] = "background-color: green"
    elif (s['my_column'] == 'somedifferent_text'):
        con[:] = "background-color: blue"
    return con
        
df.style.apply(highlight_rows, axis=1)