Pandas style function to highlight specific columns

前端 未结 2 1865
萌比男神i
萌比男神i 2020-11-28 10:55

I have been trying to write a function to use with pandas style. I want to highlight columns that I specify in the arguments. This is not very elegant, but, for example:

相关标签:
2条回答
  • 2020-11-28 11:15

    I think you can use Slicing in Styles for select columns B and C and then Styler.applymap for elementwise styles.

    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']])
    

    If you want more colors or be more flexible, use Styler.apply(func, axis=None), the function must return a DataFrame with the same index and column labels:

    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)
    

    0 讨论(0)
  • 2020-11-28 11:21

    You can do it bit more dynamically:

    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)
    

    0 讨论(0)
提交回复
热议问题