python - 根据 pandas 中的另一个列值突出显示一个列值

标签 python pandas

我有这样一个函数:

def highlight_otls(df):
    return ['background-color: yellow']

像这样的 DataFrame:

price   outlier 
1.99       F,C
1.49       L,C
1.99         F
1.39         N

我想做的是根据另一列的这种情况在我的 df 中突出显示某一列:

data['outlier'].str.split(',').str.len() >= 2

所以如果列值 df['outlier'] >= 2,我想突出显示对应的列 df['price']。 (所以前 2 个价格应该在我上面的数据框中突出显示)。

我试图通过执行以下操作来执行此操作,但出现错误:

data['price'].apply(lambda x: highlight_otls(x) if (x['outlier'].str.split(',').str.len()) >= 2, axis=1)

知道如何以正确的方式做到这一点吗?

最佳答案

使用 Styler.apply。 (要输出为 xlsx 格式,请使用 to_excel 函数。)

假设一个人的数据集是

other   price   outlier
0   X   1.99    F,C
1   X   1.49    L,C
2   X   1.99    F
3   X   1.39    N

def hightlight_price(row):
    ret = ["" for _ in row.index]
    if len(row.outlier.split(",")) >= 2:
        ret[row.index.get_loc("price")] = "background-color: yellow"
    return ret
       
df.style.\
    apply(hightlight_price, axis=1).\
    to_excel('styled.xlsx', engine='openpyxl')

来自documentation , "DataFrame.style 属性是一个返回 Styler 对象的属性。"

我们将我们的样式函数 hightlight_price 传递到 Styler.apply 并要求函数具有 axis=1 的逐行性质. (回想一下,我们要根据 同一行中的 异常值 信息为每行中的 price 单元格着色。。)

我们的函数 hightlight_price 将生成视觉样式每一行。对于每一行 row,我们首先为 otherpriceoutlier 列生成样式为 ["", "", ""]。我们可以使用 row.index.get_loc("price") 获取正确的索引,仅修改列表中的 price 部分,如

ret[row.index.get_loc("price")] = "background-color: yellow"
# ret becomes ["", "background-color: yellow", ""]

结果

enter image description here

关于python - 根据 pandas 中的另一个列值突出显示一个列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50724356/

相关文章:

python - 连接 pandas 数据帧 - 传递的所有对象都是 None

python - 如何根据pandas中的多个条件计算出一组列的平均值?

python - 如何检查时间值?

python - sklearn 逻辑回归 "ValueError: Found array with dim 3. Estimator expected <= 2."

python - Flask-Uploads URL 始终是 404

python - Pandas:如何解开每三个索引(行)并扩大数据框?

python - pandas Wide_to_long IndexError 是什么意思?

python - 阻塞执行直到条件满足

python - Keras 模型获得恒定的损失和准确性

python - Groupby ID Pandas