我正在尝试格式化数据框中特定列的单元格的颜色,但我无法根据多种条件来设置它。
这是我的数据框(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 :(&#39;系列的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。&# 39;,&#39;发生在指数Fecha&#39;)
输出结果为:
Out[65]: <pandas.formats.style.Styler at 0x1e3ab8dec50>
任何帮助将不胜感激。
答案 0 :(得分:5)
使用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>
答案 1 :(得分:0)
书写方式,没有单元会被涂成红色。 您应该更改顺序,让条件先涂成红色,再涂成黄色。