pandas 样式中每列的不同颜色
Different color for each column in pandas style
我有一个包含多列的数据框和一个包含与每列关联的颜色的列表。我想用相关颜色突出显示每列中的非空白单元格。
我试过以各种方式遍历列。最接近成功的方法是在样式函数中放置一个 for 循环,并将其应用在一个 for 循环中。这会正确突出显示最后一列,但不会突出显示其余列。
df=pd.DataFrame({'a':[1,2,3,4],'b':['','',1,''],'c':['a','b','c','']})
df_column_colors=['red','blue','green']
def highlight_cells(value):
if value=='':
background_color=None
else:
for v in range(len(df_column_colors)):
background_color=str(df_column_colors[v])
return 'background-color: %s' % background_color
for i in range(len(df.columns)):
df2=df.style.applymap(highlight_cells,subset=df.columns[i])
您可以按如下方式进行:
d= dict(zip(df.columns,['background-color:'+i for i in df_column_colors]))
#{'a': 'background-color:red', 'b': 'background-color:blue', 'c': 'background-color:green'}
def mycolor(x):
s=pd.DataFrame(d,index=x.index,columns=x.columns)
df1=x.mask(x.replace('',np.nan).notna(),s)
return df1
df.style.apply(mycolor,axis=None)
试试这个:
df = pd.DataFrame({'a':[1,2,3,4],'b':['','',1,''],'c':['a','b','c','']})
df_column_colors=['red','blue','green']
def apply_color(cells):
color = df_column_colors[df.columns.get_loc(cells.name)]
colors = []
for cell in cells:
if cell == '':
colors.append('')
else:
colors.append('background-color: %s' % color)
return colors
df.style.apply(apply_color)
我有一个包含多列的数据框和一个包含与每列关联的颜色的列表。我想用相关颜色突出显示每列中的非空白单元格。
我试过以各种方式遍历列。最接近成功的方法是在样式函数中放置一个 for 循环,并将其应用在一个 for 循环中。这会正确突出显示最后一列,但不会突出显示其余列。
df=pd.DataFrame({'a':[1,2,3,4],'b':['','',1,''],'c':['a','b','c','']})
df_column_colors=['red','blue','green']
def highlight_cells(value):
if value=='':
background_color=None
else:
for v in range(len(df_column_colors)):
background_color=str(df_column_colors[v])
return 'background-color: %s' % background_color
for i in range(len(df.columns)):
df2=df.style.applymap(highlight_cells,subset=df.columns[i])
您可以按如下方式进行:
d= dict(zip(df.columns,['background-color:'+i for i in df_column_colors]))
#{'a': 'background-color:red', 'b': 'background-color:blue', 'c': 'background-color:green'}
def mycolor(x):
s=pd.DataFrame(d,index=x.index,columns=x.columns)
df1=x.mask(x.replace('',np.nan).notna(),s)
return df1
df.style.apply(mycolor,axis=None)
试试这个:
df = pd.DataFrame({'a':[1,2,3,4],'b':['','',1,''],'c':['a','b','c','']})
df_column_colors=['red','blue','green']
def apply_color(cells):
color = df_column_colors[df.columns.get_loc(cells.name)]
colors = []
for cell in cells:
if cell == '':
colors.append('')
else:
colors.append('background-color: %s' % color)
return colors
df.style.apply(apply_color)