繁体   English   中英

python Dataframe:基于值的一列颜色单元格

[英]python Dataframe: color cell of one column based on value

我有一个带有不同列的 DataFrame。 在某些专栏中,我有一个 function,给定一个值返回 boolean:如果值有效则返回 True,否则返回 False。 我想用无效值显示在红色单元格中。

这是一个简单的例子:

df = pd.DataFrame([
      { 'name': 'mercury', 'celsius_temperature': -120, 'age': 1.8 * 10**9 },
      { 'name': 'sun', 'celsius_temperature': 5666, 'age': 3*10**9 },
      { 'name': 'XRP-189', 'celsius_temperature': -1000000, 'age': 4*10**9 },
      { 'name': 'XZT-11', 'celsius_temperature': 10**19, 'age': 12 },
])

def is_temp_valid(temp):
      return (temp > -273.15) and (temp < 10**10)

def is_age_valid(age):
      return (age > 10**8) and (age < 13*10**9)

在这个例子中,我想显示这样的东西: 示例彩色数据框

如何根据 DataFrame 的不同条件为不同列中的单元格着色?

我尝试将样式与 barckround_gradient 一起使用: https://pandas.pydata.org/docs/reference/api/pandas.io.formats.style.Styler.background_gradient.html但我需要将它与返回布尔值的函数一起使用(我给出的例子是简化的,一些 function 比只是间隔要复杂得多)。 而且,渐变并不是我想要的(我只想要红色,但这是一个小问题)。

我也看了https://pandas.pydata.org/pandas-docs/stable/user_guide/style.html但是我没有找到自定义函数的例子。

可能的解决方案如下:

import pandas as pd

df = pd.DataFrame([
      {'name': 'mercury', 'celsius_temperature': -120, 'age': 1.8*10**9},
      {'name': 'sun', 'celsius_temperature': 5666, 'age': 3*10**9},
      {'name': 'XRP-189', 'celsius_temperature': -1000000, 'age': 4*10**9},
      {'name': 'XZT-11', 'celsius_temperature': 10**19, 'age': 12},
])


def is_temp_valid(temp):
    if -273.15 < temp < 10**10:
        return 'background-color: red'


def is_age_valid(age):
    if 10**8 < age < 13*10**9:
        return 'background-color: red'


s = df.style.applymap(is_temp_valid, subset=['celsius_temperature'])
s = s.applymap(is_age_valid, subset=['age'])

s

退货

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM