【问题标题】:Pandas style applymap highlight duplicates with lambda functionPandas 风格的 applymap 使用 lambda 函数突出显示重复项
【发布时间】:2020-10-06 17:17:59
【问题描述】:

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

感谢您的帮助

【问题讨论】:

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


    【解决方案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)
    

    【讨论】:

    • 完美运行,感谢分解和解释
    • 没问题,很高兴听到我的回答有帮助!
    猜你喜欢
    • 2016-09-07
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 2016-02-21
    • 1970-01-01
    • 2021-02-09
    • 2019-11-06
    相关资源
    最近更新 更多