Skip to main content
 首页 » 编程设计

python之根据多种条件格式化 Pandas 数据框中单元格的颜色

2025年05月04日14zhujiabin

我正在尝试格式化数据框中特定列的单元格的颜色,但我无法根据多种条件进行设置。

这是我的数据框 (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: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', 'occurred at index 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>