Как написать функцию для стиля pandas, которая считывает имя фрейма данных и условия значений и окрашивает некоторые ячейки? - PullRequest
0 голосов
/ 12 июля 2020

Примечание

Аналогичная ссылка Dynami c Оценка выражения в pandas с использованием pd.eval ()

Эта ссылка говорит о df.eval и df.query но не решает эту проблему напрямую.

MWE

import numpy as np
import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')
df1 = df.head()

def mystyle(df, cond,x=None,v=None):
    return df.style.apply(lambda x: ["background: salmon"
                            if eval(cond) # eval(cond) exec(cond)
                            else ""
                            for v in x], axis = 1)

cond = "x.name == 2 and v == 3"

# Note: the arbitrary condition only involves two variables x (pandas series) and v (value)
mystyle(df1,cond)

Вопрос

Как реализовать функцию mystyle(df,cond), которая дает результат

введите описание изображения здесь

Ошибка

NameError: name 'x' is not defined

1 Ответ

2 голосов
/ 12 июля 2020

Вот мои 10 центов:

import numpy as np
import pandas as pd

def f(x,cond='',c='lightgreen'):
    attr = f'background-color: {c}'
    df1 = x.astype(str).replace(x, '')
    df1 = df1.astype(str).replace('nan','')
    df1[eval(cond)] = attr

    return df1

cond = "x[x.index==2]==3"
df1.style.apply(f,axis=None,cond=cond)

выход

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...