我有一个简单的DataFrame,由A、B和C三列组成.这些列可以包含不同的值(文本),但有时会包含单词‘Alarm’.根据"Alarm"在一行中出现的次数,我想给整行涂上 colored颜色 . 问题:它总是用相同的 colored颜色 给整个数据帧上色.

下面是重现数据帧的代码:

data = {'A': ['ALARM', 'ALARM', 'krish', 'Peter'],
    'B': ['Tom', 'ALARM', 'krish', 'ALARM'],
    'C': ['Jack', 'ALARM', 'krish', 'ALARM'],}

df = pd.DataFrame(data)

下面是我用来给这个框架上色的代码:

def num_alarms(series):    

    red = 'background-color: red;'
    orange = 'background-color: orange;'
    yellow = 'background-color: yellow;'
    green = 'background-color: green;'

    return [red if num == 3 else orange if num == 2 else yellow if num == 1 else green for e 
    in series]


 for index, row in df.iterrows():
    num = (df == 'ALARM').sum(axis = 1)[index]   

    s = df.style.apply(num_alarms, axis = 'index', subset = slice(index))

 display(s)

注意:我一直在用一个笔记本电脑.

推荐答案

使用Series.map表示按字典获取映射值并删除循环,仅对axis=1使用Styler.apply:

def styled_alarms(x):    

    red = 'background-color: red;'
    orange = 'background-color: orange;'
    yellow = 'background-color: yellow;'
    green = 'background-color: green;'
    
    d = {0:green,1:yellow, 2:orange, 3:red}
    return np.repeat(d.get((x == 'ALARM').sum()), len(x))
 
df.style.apply(styled_alarms, axis=1)

Python相关问答推荐

仿制药的类型铸造

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

利用Selenium和Beautiful Soup实现Web抓取JavaScript表

所有列的滚动标准差,忽略NaN

如何使Matplotlib标题以图形为中心,而图例框则以图形为中心

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

无法连接到Keycloat服务器

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

Polars asof在下一个可用日期加入

如何使用两个关键函数来排序一个多索引框架?

如何杀死一个进程,我的Python可执行文件以sudo启动?

手动设置seborn/matplotlib散点图连续变量图例中显示的值

Python将一个列值分割成多个列,并保持其余列相同

获取git修订版中每个文件的最后修改时间的最有效方法是什么?

提取最内层嵌套链接

将像素信息写入文件并读取该文件

极点:在固定点扩展窗口

有没有一种方法可以根据不同索引集的数组从2D数组的对称子矩阵高效地构造3D数组?

Python:使用asyncio.StreamReader.readline()读取长行

如何有效地计算所有输出相对于参数的梯度?