【问题标题】:Highlight rows from a DataFrame based on values in a column in Python Pandas根据 Python Pandas 中的列中的值突出显示 DataFrame 中的行
【发布时间】:2018-09-15 13:21:19
【问题描述】:

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

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

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

ValueError:非唯一索引不支持样式。

这是代码:

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

知道我做错了什么吗?

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

谢谢

【问题讨论】:

  • 错误看起来很清楚...您的数据框具有非唯一索引(即索引具有重复值),并且这种情况不支持.style。你可以试试df.reset_index().style.apply(highlight_rows, axis = 0)
  • 谢谢@jdehesa,它消除了错误。我以为是别的东西,因为我首先尝试使用命令df.set_index(['my_column'], append = True)。它现在没有给我任何错误,但是在使用 ExcelWriter 方法导出数据框后,我没有看到任何突出显示的行。
  • 好吧reset_index()给你一个新的数据框,你可以做df2 = df.reset_index(); df2.style.apply(highlight_rows, axis = 0)然后导出df2...
  • 信息:同名的两列生成相同的错误消息。

标签: python python-3.x pandas dataframe highlight


【解决方案1】:

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)

【讨论】:

    【解决方案2】:

    假设 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 2021-08-04
      • 2016-05-05
      • 2013-08-12
      • 1970-01-01
      • 2011-12-01
      • 2020-06-22
      相关资源
      最近更新 更多