繁体   English   中英

根据多种条件格式化熊猫数据框中的单元格颜色

[英]Format the color of a cell in a pandas dataframe according to multiple conditions

我正在尝试格式化数据框中特定列的单元格的颜色,但是我无法根据多种条件来做到这一点。

这是我的数据框(df):

    Name     ID         Cel     Date
0   Diego   b000000005  7878    2565-05-31 20:53:00
1   Luis    b000000015  6464    2017-05-11 20:53:00
2   Vidal   b000000002  1100    2017-05-08 20:53:00
3   John    b000000011  4545    2017-06-06 20:53:00
4   Yusef   b000000013  1717    2017-06-06 20:53:00

我希望“日期”列中的值根据以下条件更改颜色:

 if date < datetime.now():
        color = 'green'
    elif date > datetime.now():
        date = 'yellow'
    elif date > (datetime.now() + timedelta(days=60)):
        color = 'red'

这是我当前的代码:

def color(val):
    if val < datetime.now():
        color = 'green'
    elif val > datetime.now():
        color = 'yellow'
    elif val > (datetime.now() + timedelta(days=60)):
        color = 'red'
    return 'background-color: %s' % color

df.style.apply(color, subset = ['Fecha'])

我收到以下错误:

ValueError:('系列的真值不明确。请使用a.empty,a.bool(),a.item(),a.any()或a.all()。','发生在索引Fecha' )

输出为:

Out[65]: <pandas.formats.style.Styler at 0x1e3ab8dec50>

任何帮助将不胜感激。

使用applymap

from datetime import datetime, timedelta
import pandas as pd

name = ['Diego', 'Luis', 'Vidal', 'John', 'Yusef']
id = ['b000000005', 'b000000015', 'b000000002', 'b000000011', 'b000000013']
cel = [7878, 6464, 1100, 4545, 1717]
date = pd.to_datetime(['2017-05-31 20:53:00', '2017-05-11 20:53:00', '2017-05-08 20:53:00', 
                       '2017-06-06 20:53:00', '2017-06-06 20:53:00'])

df = pd.DataFrame({'Name':name,'ID':id,'Cel':cel,'Date':date})

def color(val):
    if val < datetime.now():
        color = 'green'
    elif val > datetime.now():
        color = 'yellow'
    elif val > (datetime.now() + timedelta(days=60)):
        color = 'red'
    return 'background-color: %s' % color

df.style.applymap(color, subset=['Date'])

熊猫样式器输出

Jupyter笔记本的屏幕截图。 如果您改为print输出,则只会得到对Styler对象的引用:

print(df.style.applymap(color, subset=['Date']))
<pandas.formats.style.Styler object at 0x116db43d0>

它的书写方式不会将任何单元涂成红色。 您应该更改顺序,让条件在涂成黄色之前先涂成红色。

暂无
暂无

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

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