使用Pandas突出显示不同颜色的多个单元格

本教程将介绍使用Pandas突出显示不同颜色的多个单元格的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

使用Pandas突出显示不同颜色的多个单元格 教程 第1张

问题描述

假设我们有一个数据框,我想给不同的单元格涂上颜色:

    单元格['Arizona','company'](1st)['Texas','size'](1099)为绿色。

    单元格['Florida','veterans'](26)['Maine','armored'](0)为红色。

做这件事的好方法是什么?

raw_data = {'regiment': ['Nighthawks', 'Nighthawks', 'Nighthawks', 'Nighthawks', 'Dragoons', 'Dragoons', 'Dragoons', 'Dragoons', 'Scouts', 'Scouts', 'Scouts', 'Scouts'],
'company': ['1st', '1st', '2nd', '2nd', '1st', '1st', '2nd', '2nd','1st', '1st', '2nd', '2nd'],
'deaths': [523, 52, 25, 616, 43, 234, 523, 62, 62, 73, 37, 35],
'battles': [5, 42, 2, 2, 4, 7, 8, 3, 4, 7, 8, 9],
'size': [1045, 957, 1099, 1400, 1592, 1006, 987, 849, 973, 1005, 1099, 1523],
'veterans': [1, 5, 62, 26, 73, 37, 949, 48, 48, 435, 63, 345],
'readiness': [1, 2, 3, 3, 2, 1, 2, 3, 2, 1, 2, 3],
'armored': [1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1],
'deserters': [4, 24, 31, 2, 3, 4, 24, 31, 2, 3, 2, 3],
'origin': ['Arizona', 'California', 'Texas', 'Florida', 'Maine', 'Iowa', 'Alaska', 'Washington', 'Oregon', 'Wyoming', 'Louisana', 'Georgia']}

df = pd.DataFrame(raw_data, columns = ['regiment', 'company', 'deaths', 'battles', 'size', 'veterans', 'readiness', 'armored', 'deserters', 'origin'])

df = df.set_index('origin')

df.head()

(http://chrisalbon.com/python/pandas_indexing_selecting.html)

推荐答案

可以将slicing in Style与参数subset和函数Styler.applymap一起使用以获得基本样式,请在jupyter notebook中运行代码:

import pandas as pd
import numpy as np

def red(val):
 color = 'red'
 return 'background-color: %s' % color

def green(val):
 color = 'green'
 return 'background-color: %s' % color

raw_data = {'regiment': ['Nighthawks', 'Nighthawks', 'Nighthawks', 'Nighthawks', 'Dragoons', 'Dragoons', 'Dragoons', 'Dragoons', 'Scouts', 'Scouts', 'Scouts', 'Scouts'],
'company': ['1st', '1st', '2nd', '2nd', '1st', '1st', '2nd', '2nd','1st', '1st', '2nd', '2nd'],
'deaths': [523, 52, 25, 616, 43, 234, 523, 62, 62, 73, 37, 35],
'battles': [5, 42, 2, 2, 4, 7, 8, 3, 4, 7, 8, 9],
'size': [1045, 957, 1099, 1400, 1592, 1006, 987, 849, 973, 1005, 1099, 1523],
'veterans': [1, 5, 62, 26, 73, 37, 949, 48, 48, 435, 63, 345],
'readiness': [1, 2, 3, 3, 2, 1, 2, 3, 2, 1, 2, 3],
'armored': [1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1],
'deserters': [4, 24, 31, 2, 3, 4, 24, 31, 2, 3, 2, 3],
'origin': ['Arizona', 'California', 'Texas', 'Florida', 'Maine', 'Iowa', 'Alaska', 'Washington', 'Oregon', 'Wyoming', 'Louisana', 'Georgia']}

df = pd.DataFrame(raw_data, columns = ['regiment', 'company', 'deaths', 'battles', 'size', 'veterans', 'readiness', 'armored', 'deserters', 'origin'])

df = df.set_index('origin')
print (df)

df.style.applymap(green, subset=pd.IndexSlice['Arizona':'Texas', 'company': 'size'])
  .applymap(red, subset=pd.IndexSlice['Florida':'Maine', 'veterans': 'armored'])

如果只需要更改DataFrame中的一些值,您可以使用Styler.applyWITHaxis=None作为表式样式,该函数还必须返回具有相同索引和列标签的DataFrame

def create_colors(x):
 #copy df to new - original data are not changed
 df1 = x.copy()
 #select all values to default value - no color
 df1.loc[:,:] = 'background-color: '
 #overwrite values with green and red color
 df1.loc['Arizona', 'company'] = 'background-color: green'
 df1.loc['Texas', 'size'] = 'background-color: green'
 df1.loc['Florida', 'veterans'] = 'background-color: red'
 df1.loc['Maine', 'armored'] = 'background-color: red'
 #return color df
 return df1

df.style.apply(create_colors, axis=None)

好了关于使用Pandas突出显示不同颜色的多个单元格的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。