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

3

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

4

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


1
工作得非常完美,感谢您分解和解释。 - a11
没问题,很高兴听到我的回答有所帮助! - Derek O

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接