根据条件突出显示行

人气:59 发布:2023-01-03 标签: pandas conditional-formatting xlsxwriter pandas-styles

问题描述

我有一个随机数据框,其中包含两列日期,我一直在尝试突出显示条件日期列表中存在开始日期的行。以下是我失败的尝试:

import pandas as pd 
import numpy as np
import datetime

df = pd.DataFrame({"Start": pd.date_range("1-jan-2021", periods=10, freq="1H")}).assign(**{"End": lambda d: d["Start"]+pd.Timedelta(hours=20)})

date_condition = ['2021-01-01 05:00:00','2021-01-01 08:00:00', '2021-01-01 02:00:00']
df = df.style.applymap(lambda x: 'background-color : yellow' if x['Start'] in date_condition)

由于我正尝试使用xlsWriter导出此数据帧,因此我正在寻找一种即使在Excel文件中也能保持背景颜色的方法。谢谢!

推荐答案

我们可以结合使用np.whereSeries.isin

date_condition = ['2021-01-01 05:00:00', '2021-01-01 08:00:00',
                  '2021-01-01 02:00:00']

highlighted_rows = np.where(df['Start'].isin(date_condition),
                            'background-color: yellow',
                            '')
# Apply calculated styles to each column:
styler = df.style.apply(lambda _: highlighted_rows)
styler.to_excel('output.xlsx')  # use styler to export to excel
# styler  # to display in NoteBook

isin+Series.map

date_condition = ['2021-01-01 05:00:00', '2021-01-01 08:00:00',
                  '2021-01-01 02:00:00']

highlighted_rows = df['Start'].isin(date_condition).map({
    True: 'background-color: yellow',
    False: ''
})
# Apply calculated styles to each column:
styler = df.style.apply(lambda _: highlighted_rows)
styler.to_excel('output.xlsx')  # use styler to export to excel
# styler  # to display in NoteBook

在Excel中:

在Jupyter笔记本

15