Использование значений ячеек Dataframe для стилизации другого Dataframe с такими же размерами - PullRequest
0 голосов
/ 23 января 2019
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 голосов
/ 23 января 2019

Вы можете изменить формат значений для строк, а затем вернуть 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

...