Pandas дубликатов подсветки карты стилей с помощью лямбда-функции - PullRequest
2 голосов
/ 17 июня 2020

У меня есть фрейм данных Pandas, и я работаю в записной книжке Jupyter. Я хочу выделить строки, в которых дублируются пары столбцов. Вот пример:

colA = list(range(1,6))
colB = ['aa', 'bb', 'aa', 'cc', 'aa']
colC = [14,3,14,9,12]
colD = [108, 2001, 152, 696, 696]
df = pd.DataFrame(list(zip(colA, colB, colC, colD)), columns =['colA', 'colB', 'colC', 'colD']) 
display(df)

enter image description here

Я хочу выделить эти строки, потому что значения в colB и col C дублируются:

enter image description here

Я пробую эту лямбда-функцию, но она выдает ошибку (и только для одного столбца):

df.style.applymap(lambda x: 'background-color : yellow' if x[colB].duplicated(keep=False) else '')
TypeError: ("'int' object is not subscriptable", 'occurred at index colA')

Спасибо за любую помощь

1 Ответ

1 голос
/ 17 июня 2020

Лично я бы разбил проблему на два этапа, а не использовал бы одну сложную лямбда-функцию. Мы можем найти индекс всех повторяющихся строк, а затем выделить строки по номеру индекса. Также не забывайте, что в вашей лямбда-функции вы должны использовать понимание списка в том, что вы возвращаете.

rows_series = df[['colB','colC']].duplicated(keep=False)
rows = rows_series[rows_series].index.values
df.style.apply(lambda x: ['background: yellow' if x.name in rows else '' for i in x], axis=1)

enter image description here

...