Как раскрасить альтернативные строки с помощью Python, но цвет строки должен совпадать с предыдущей строкой, если определенное значение столбца совпадает

#python #xlsxwriter

#python #xlsxwriter

Вопрос:

У меня есть файл с разделителями табуляции, в который я добавляю некоторое форматирование и записываю в файл Excel. Один запрос заключается в том, чтобы раскрасить альтернативные строки кода, но в файле есть столбец doc_no, и для строк с тем же doc_no строки должны иметь одинаковый цвет. Как в примере ниже:

Это результат, который я хочу

У меня есть это, где альтернативные строки имеют цветовую маркировку, а повторяющиеся doc_nos выделены (цвета, которые я использовал в примере для иллюстрации, могут не совпадать с цветами в коде). Я не уверен, как получить запрошенный результат, и был бы признателен за любую помощь.

Текущий Выход

Мой код:

 import pandas as pd
import numpy as np
import time

infile = (r'C:..test.txt')

#read in tab delimited text file into dataframe
df = pd.read_csv(infile, sep='t', dtype = str, encoding='cp1252')

#delete columns with all null values
df.dropna(how='all', axis='columns', inplace=True)

#Get Date Range into variable date_range to print as HEADER and remove column from dataframe
date_range = df.iloc[0,0]
df.drop('Date Range', axis=1, inplace=True)

#replace NAN with empty string
df = df.replace(np.nan, '', regex=True)

dtstamp = time.strftime('%m-%d-%Y')

#Writing dataframe to Excel
writer = pd.ExcelWriter(r'C:..TEST-' dtstamp '.xlsx', engine = 'xlsxwriter')
df.to_excel(writer, sheet_name = 'Sheet1', startrow=2, index=False)

workbook = writer.book
ws = writer.sheets['Sheet1']

#--------------------------color code rows-------------------------------------
rcolor1 = workbook.add_format({'bg_color': '#D3D3D3'})
rcolor2 = workbook.add_format({'bg_color': '#FFE4E1'})                                     

for row in range(3,(len(df.index) 3), 2):
    ws.set_row(row,cell_format=rcolor2)

ws.conditional_format('B3:B' str(len(df.index) 3),{'type': 'duplicate', 'format': rcolor1})
    
...

writer.save()
workbook.close()