Подчеркивая разницу между двумя кадрами - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть два кадра с датами:

df1:

Name  A             B             C  
D1    2018-04-26    2018-04-24    2018-04-24
D2    2018-04-25    2018-04-23    2018-04-23
D3    2018-04-25    2018-04-26    2018-04-26

df2:

Name  A             B             C  
D1    2018-04-24    2018-04-23    2018-04-24
D2    2018-04-25    2018-04-23    2018-04-21
D3    2018-04-22    2018-04-24    2018-04-23

Допустим, я хотел бы стилизовать df1 так, чтобы, если значение не равнялось соответствующему значению в df2, оно выделяло красную ячейку.

Я знаю, что мне нужно создать функцию и использовать

df1.style.applymap()

но у меня проблемы с соединением функции. Что-то вроде;

def diffindicator(val):
    color = 'white'   
    if val != df2:
        color = 'red'
    return 'background-color: %s' % color

1 Ответ

0 голосов
/ 30 апреля 2018

Вот один из способов выделить разницу:

# Load Example Data
df1 = pd.read_fwf(StringIO(
'''Name  A             B             C  
D1    2018-04-26    2018-04-24    2018-04-24
D2    2018-04-25    2018-04-23    2018-04-23
D3    2018-04-25    2018-04-26    2018-04-26'''))
df2 = pd.read_fwf(StringIO(
'''Name  A             B             C  
D1    2018-04-24    2018-04-23    2018-04-24
D2    2018-04-25    2018-04-23    2018-04-21
D3    2018-04-22    2018-04-24    2018-04-23'''))

def highlight_diff(data, other, color='pink'):
    # Define html attribute
    attr = 'background-color: {}'.format(color)
    # Where data != other set attribute
    return pd.DataFrame(np.where(data.ne(other), attr, ''),
                        index=data.index, columns=data.columns)

# Set axis=None so it passes the entire frame
df2.style.apply(highlight_diff, axis=None, other=df1)

Выход:

Difference between Frames

Кроме того, взгляните на этот вопрос , чтобы поближе взглянуть на предмет получения различий между фреймами данных ... На самом деле, мой ответ может или не может быть вдохновлен этим ответом .

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