Pandas风格的applymap用lambda函数高亮显示重复的内容。

问题描述 投票:0回答:1

我有一个Pandas数据框架,正在Jupyter笔记本中工作。我想突出显示列对重复的行。下面是一个例子,我想突出显示这些行,因为colB和colC中的值是重复的。

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')

谢谢你的帮助

python-3.x pandas jupyter-notebook duplicates highlight
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.