使用数据框单元格值设置另一个具有相同尺寸的数据框的样式

时间:2019-01-23 15:41:03

标签: python pandas styling

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': 'foo bar foo'.split(),
               'B': 'one one two'.split(),
               'C': np.arange(3), 'D': np.arange(3) * 2})

j = [{'bgcolor': "#55aa2a"}, {'bgcolor': "#d42a2a"}, {'bgcolor': "#d42a2a"}]
df2 = pd.DataFrame({'E': j, 'F': j, 'G': j, 'H': j})

上面的代码产生两个数据帧,df1是标准帧,df2是由字典组成的帧(每个单元格都有一个字典作为其值)。

我想使用df2的单元格来对df的单元格进行样式设置,即单元格df[0,1]将采用单元格df2[0,1]的值并使用它风格

示例:

def highlight(df,df2):
    df[0,1] = '{}'.format(df2[0,1])
    return df

(除了应用于整个帧)

这应将df[0,1]的背景色设为df2[0,1]="55aa2a",但在调用KeyError后返回df = df.style.apply(highlight, df2=df2).render()

是否可以使用df2的单元格来设置df1的单元格的样式?

1 个答案:

答案 0 :(得分:1)

您可以更改字符串值的格式,然后返回具有相同列名的DataFrame(索引值也必须相同):

df2 = df2.applymap(lambda x: 'background-color: {}'.format(x.get('bgcolor')))
print (df2)
                           E                          F  \
0  background-color: #55aa2a  background-color: #55aa2a   
1  background-color: #d42a2a  background-color: #d42a2a   
2  background-color: #d42a2a  background-color: #d42a2a   

                           G                          H  
0  background-color: #55aa2a  background-color: #55aa2a  
1  background-color: #d42a2a  background-color: #d42a2a  
2  background-color: #d42a2a  background-color: #d42a2a  

def highlight(x):
    d = dict(zip(df2.columns, x.columns))
    return df2.rename(columns=d)

或者:

def highlight(x):
    return pd.DataFrame(df2.values, columns=x.columns)

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

df