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
的单元格的样式?
答案 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)