【问题标题】:Pandas style function to highlight specific columns用于突出显示特定列的 Pandas 样式功能
【发布时间】:2017-01-14 20:58:18
【问题描述】:

我一直在尝试编写一个与 pandas style 一起使用的函数。我想突出显示我在参数中指定的特定列。这不是很优雅,但是例如:

data =  pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))

def highlight_cols(df, cols, colcolor = 'gray'):
    for col in cols:
        for dfcol in df.columns:
            if col == cols:
                color = colcolor
    return ['background-color: %s' % color]*df.shape[0]

然后调用:

data.style.apply(highlight_cols(cols=['B','C']))

我收到一个错误: 'Series' object has no attribute 'columns'

我想我基本上不太了解样式器如何调用和applyies 函数。

【问题讨论】:

    标签: python pandas pandas-styles


    【解决方案1】:

    我认为您可以将Slicing in Styles 用于选择列BC,然后将Styler.applymap 用于元素样式。

    import pandas as pd
    import numpy as np
    
    data =  pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))
    #print (data)
    
    def highlight_cols(s):
        color = 'grey'
        return 'background-color: %s' % color
    
    data.style.applymap(highlight_cols, subset=pd.IndexSlice[:, ['B', 'C']])
    

    如果您想要更多颜色或更灵活,请使用Styler.apply(func, axis=None),该函数必须返回具有相同索引和列标签的DataFrame

    import pandas as pd
    import numpy as np
    
    data =  pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))
    #print (data)
    
    def highlight_cols(x):
        #copy df to new - original data are not changed
        df = x.copy()
        #select all values to default value - red color
        df.loc[:,:] = 'background-color: red'
        #overwrite values grey color
        df[['B','C']] = 'background-color: grey'
        #return color df
        return df    
    
    data.style.apply(highlight_cols, axis=None)
    

    【讨论】:

    • 感谢您的回答,我想在样式后将值返回为零。可能吗?我遇到了 Styler 错误。,
    • 我尝试过返回 return 'background-color: %s;数据:0;' % color return '背景色:%s;内容:0;' % 颜色
    • @CSMaverick - 抱歉,我有点困惑,可以创建新问题吗?可以免费使用这个答案。
    • 有没有办法统计高亮显示的行数?
    • @MOA - 我认为最好的方法是创建问题,这取决于您的代码。
    【解决方案2】:

    你可以更动态地做到这一点:

    data =  pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))
    
    # dictionary of column colors
    coldict = {'A':'grey', 'C':'yellow'}
    
    def highlight_cols(s, coldict):
        if s.name in coldict.keys():
            return ['background-color: {}'.format(coldict[s.name])] * len(s)
        return [''] * len(s)
    
    data.style.apply(highlight_cols, coldict=coldict)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 2018-05-10
      • 2016-11-26
      相关资源
      最近更新 更多