如何使用lambda将样式应用于Pandas DataFrame?[英] How to use lambda to apply style to Pandas DataFrame

本文是小编为大家收集整理的关于如何使用lambda将样式应用于Pandas DataFrame?的处理方法,想解了如何使用lambda将样式应用于Pandas DataFrame?的问题怎么解决?如何使用lambda将样式应用于Pandas DataFrame?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个数据框,我想用红色突出显示出现"BBC"一词的单元格.

查看 这个 SO 线程这个我尝试了以下:

df.style.apply(lambda x: ["background-color: red" if x == "BBC News" else "background-color: green"])

df.style.apply(lambda x: ["background-color: red" if v == "BBC News" else "background-color: green" for v in x], axis=None)

在此处输入图片描述

但这不会给任何东西上色.FWIW,我不知道我使用的示例中的 x 或 v 是什么.我假设 x 是一个单元格,而 v 将是单元格的一部分?

如何有条件地格式化单元格?我还会添加其他内容,即如果"CNN"出现在单元格中,颜色为黄色等.

编辑:我尝试了简单的 df.style.apply(lambda x: ["background-color: green"]) 并没有发生任何事情(如果我使用 #ff0000 或 rgb(0,0,255) 也是如此).

明确地说,我在做:

df.style.apply(lambda x: ["background-color: #ff0000" if v['newsSource'] == "BBC News" else "background-color: #ffff00"], axis=None)
df.to_html("styletest.html")

所以我希望 HTML 文档 中的颜色可见,而不是数据框本身.

推荐答案

好了,应该这样了:

import pandas as pd

df = pd.DataFrame([['BBC News','something','Test1'],
                    ['The Wall Street Journal','something else','Test2'],
                    ['BBC News','something else entirely','Test3']],
                    columns=['newsSource','description','title'])

html = df.style.apply(lambda x: ["background: red" if 'BBC' in x['newsSource'] and idx==0 else "" for idx, v in enumerate(x)], axis = 1).set_table_attributes('border="1" class="dataframe table table-hover table-bordered"').render()

with open('test.html', 'w') as f:
    f.write(html)

解释:

lambda 运算符允许您对 df 的每一行(由 axis=1 指定)apply 以下 ["background: red" if 'BBC' in x['newsSource'] and idx==0 else "" for idx, v in enumerate(x)],其中 x 是 df 的每一行.

在英文中,这意味着如果字符串 'BBC' 包含在 x['newsSource'] 中,则更改为 "background: red",即 df 的 x 行的 'newsSource' 列.指定 idx==0 的额外逻辑仅表示该行 x 的第一个单元格,为此我们必须 enumerate(x) 以跟踪当前列索引 idx.否则,不要使用 else "" 更改背景颜色.希望这很清楚!

本文地址:https://www.itbaoku.cn/post/1727766.html