![](/img/trans.png)
[英]Python Pandas Dataframe Pulling cell value of Column B based on Column A
[英]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.