Pandas 样式 applymap 使用 lambda 函数突出显示重复项

Pandas style applymap highlight duplicates with lambda function

我有一个 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)

我想突出显示这些行,因为 colB 和 colC 中的值重复:

我正在尝试这个 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')

感谢您的帮助

就我个人而言,我会将问题分为两步而不是使用一个复杂的 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)