【问题标题】:How to change background cell color according with a given key in pandas?如何根据熊猫中的给定键更改背景单元格颜色?
【发布时间】:2018-09-10 10:28:10
【问题描述】:

我有以下数据框:

df = pd.DataFrame({"A":["foo", "foo", "foo", "bar"],  
                   "B":["A","A","B","A"], 
                   "C":[0,3,1,1]})

如何更改 A 列和 B 列的单元格颜色,按其值分组。我的意思是,这将是理想的输出:

可能是这样的:

df.groupby(by=['A', 'B']).style.change_background()

由于真正的数据框有数百行,我会对自动分配颜色感兴趣。

【问题讨论】:

  • 谢谢!但是使用这种方法,您不能只按两列分组并自动为每个组分配不同的颜色。
  • 根据key是什么意思?您的意思是对于 C 的值,您将设置颜色?
  • 不,由 A 和 B 的组合值。我已经更新了问题。谢谢!

标签: python pandas numpy dataframe


【解决方案1】:
from matplotlib.pyplot import cm 
from matplotlib.colors import to_hex

# convert groups to indices    
g = pd.Categorical(df.A + df.B).codes

# generate a list hex colors
color = cm.rainbow(g / g.max())
hex_color = [to_hex(col) for col in color]
print('generate colors: ', hex_color)

# apply the colors to style for columns A and B
df.style.apply(
    lambda col: ['background-color: %s' % (hex_color[i]) for i in range(col.size)], 
    subset=['A', 'B']
)

Antonvbr 更新:(受此解决方案的启发,我也添加了一个使用 seaborn 的解决方案。

import seaborn as sns
import pandas as pd

df = pd.DataFrame({"A":["foo", "foo", "foo", "bar"],  
                   "B":["A","A","B","A"], 
                   "C":[0,3,1,1]})

g = pd.Categorical(df.A + df.B).codes # convert groups to indices  
n = np.unique(g).size
palette = sns.color_palette("hls", n).as_hex()

# apply the colors to style for columns A and B
df.style.apply(
    lambda x: ['background-color: {}'.format(palette[i]) for i in g], 
    subset=['A', 'B']
)

【讨论】:

  • 谢谢!如果我之前已经设置了一种样式怎么办?我收到以下错误:AttributeError: 'Styler' object has no attribute 'style'。换句话说,如何将两种不同的样式应用于数据框?干杯!
  • @harrison4 用代码举例说明你的意思。但这看起来更像是一个新问题。 [at]Psidom 我修改了你的答案以包括流行的 Seaborn 包,希望你不介意。
  • @AntonvBR 没问题。很好的编辑,在此处包含 seaborn 选项。
  • @harrison4 我猜你在以前的风格上使用了style。只需使用apply 链接样式。即df.style.apply(...style1).apply(...style2) 而不是df.style.apply(...).style.apply(...)
  • 就是这样!非常感谢,Psidom! :)
猜你喜欢
  • 2011-04-03
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 2011-12-23
  • 2022-01-20
  • 2015-08-22
  • 2014-09-30
  • 1970-01-01
相关资源
最近更新 更多