Pandas:基于数据框中的另一列设置特定单元格的样式

2024-09-29 20:28:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据数据框中另一列的值高亮显示单元格。与下面的示例一样,如果p1_ourproduct的值等于1,那么我想突出显示prodkey1和product1单元格,对于产品2和3也是如此

我该怎么做

import pandas as pd data = { 'prodkey1': [101,102,103,104,105], 'prdouct1': ['a','b','c','d','e'], 'prodkey2': [201,202,203,204,205], 'prdouct2': ['f','g','h','i','j'], 'prodkey3': [301,302,303,304,305], 'prdouct3': ['k','l','m','n','o'], 'p1_ourproduct': [1,0,1,0,0], 'p2_ourproduct': [0,0,1,1,0], 'p3_ourproduct': [0,1,0,0,1], } df = pd.DataFrame(data)

预期产出: enter image description here


Tags: 数据import示例pandasdata产品aspd
1条回答
网友
1楼 · 发布于 2024-09-29 20:28:39

您可以编写一个自定义的highlighter函数,并apply将其:

import re

def highlighter(col):
    if "ourproduct" in col.name:
        return ""
    else:
        last_digits = re.search(r"(\d+)$", col.name).group(1)
        lookup_column = f"p{last_digits}_ourproduct"
        return ["background-color: yellow"
                if our_prod
                else ""
                for our_prod in df[lookup_column]]

df.style.apply(highlighter)

首先,我们查看传递的列的名称:如果它包含ourproduct,则返回空字符串,即不使用样式。否则,使用regex (\d+)$获取列名中的最后一位,并查找相应的ourproduct列。然后形成一个列表理解:如果相应查找列中的值为1(即if our_prod部分),则返回一个带有黄色的背景色样式;否则没有样式

得到

enter image description here

相关问题 更多 >

    热门问题