熊猫样式Applymap使用Lambda函数突出显示重复项

时间:2020-06-17 00:36:17

标签: python-3.x pandas jupyter-notebook duplicates highlight

我有一个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和colC中的值是重复的:

enter image description here

我正在尝试使用此lambda函数,但会引发错误(并且仅适用于一列):

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 个答案:

答案 0 :(得分:1)

我个人将问题分为两步,而不是使用一个复杂的lambda函数。我们可以找到所有重复行的索引,然后按索引号突出显示行。同样不要忘记在lambda函数中,您应该在返回的内容中使用列表推导。

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