2017-08-10 45 views
1

我由此代码生成一个数据帧:Python的熊猫 - 在柱突出最大值

hmdf = pd.DataFrame(hm01) 
new_hm02 = hmdf[['FinancialYear','Month']] 
new_hm01 = hmdf[['FinancialYear','Month','FirstReceivedDate']] 

hm05 = new_hm01.pivot_table(index=['FinancialYear','Month'], aggfunc='count') 
vals1 = ['April ', 'May  ', 'June  ', 'July  ', 'August ', 'September', 'October ', 'November ', 'December ', 'January ', 'February ', 'March '] 

df_hm = new_hm01.groupby(['Month', 'FinancialYear']).size().unstack(fill_value=0).rename(columns=lambda x: '{}'.format(x)) 
df_hml = df_hm.reindex(vals1) 

然后我有一个函数来突出各列中的最大值:

def highlight_max(data, color='yellow'): 
    ''' 
    highlight the maximum in a Series or DataFrame 
    ''' 
    attr = 'background-color: {}'.format(color) 
    if data.ndim == 1: # Series from .apply(axis=0) or axis=1 
     is_max = data == data.max() 
     return [attr if v else '' for v in is_max] 
    else: # from .apply(axis=None) 
     is_max = data == data.max().max() 
     return pd.DataFrame(np.where(is_max, attr, ''), 
          index=data.index, columns=data.columns) 

而然后此代码:dfPercent.style.apply(highlight_max)产生这样的:

enter image description here

正如您所看到的,只有第一列和最后一列才会突出显示正确的最大值。

任何人都知道发生了什么问题?

谢谢

+0

尝试'dfPercent.style.applymap(highlight_max)' –

+0

嘿,得到一个错误:AttributeError:(“'str'对象没有属性'ndim'”,u'ccurred在index 2014/2015')? – ScoutEU

+1

它似乎也应用在列名称上的功能... –

回答

4

有问题,你需要将值转换为浮动正确max,因为得到的字符串的最大值 - 9更是1

def highlight_max(data, color='yellow'): 
    ''' 
    highlight the maximum in a Series or DataFrame 
    ''' 
    attr = 'background-color: {}'.format(color) 
    #remove % and cast to float 
    data = data.replace('%','', regex=True).astype(float) 
    if data.ndim == 1: # Series from .apply(axis=0) or axis=1 
     is_max = data == data.max() 
     return [attr if v else '' for v in is_max] 
    else: # from .apply(axis=None) 
     is_max = data == data.max().max() 
     return pd.DataFrame(np.where(is_max, attr, ''), 
          index=data.index, columns=data.columns) 

样品

dfPercent = pd.DataFrame({'2014/2015':['10.3%','9.7%','9.2%'], 
        '2015/2016':['4.8%','100.8%','9.7%']}) 
print (dfPercent) 
    2014/2015 2015/2016 
0  10.3%  4.8% 
1  9.7% 100.8% 
2  9.2%  9.7% 

jupyter

+0

嘿jezrael。谢谢。我得到一个'ValueError:'('无效的文字为float():9.2%',u'ccurred在索引2014/2015')'错误? – ScoutEU

+1

给我一些时间,我必须测试它。 – jezrael

+0

谢谢!我真的很感激它:) – ScoutEU