我一直在尝试编写一个与pandas风格一起使用的函数.我想要在参数中指定的高列.这不是很优雅,但例如:
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']))
我收到一个错误:("'系列'对象没有属性'列'")
我认为我从根本上不太明白样式器如何调用和应用该函数.
谢谢,
我想你可以使用切片中Styles
的选择列B
,并C
再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
具有相同索引和列标签的a:
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)
你可以更动态地做到这一点:
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)