у меня есть 2 кадра данных, из которых я должен определить разницу в ячейках. Везде, где я найду разницу, я должен изменить цвет этой ячейки (цвет фона) в первом кадре данных, а также во втором кадре данных. В моем случае первая ячейка данных должна быть окрашена #FFCCCC, а вторая - #DAF6FF. Вывод этих фреймов данных должен быть сохранен в двух разных файлах Excel.
я пробовал с этими ответами: https://kanoki.org/2019/01/02/pandas-trick-for-the-day-color-code-columns-rows-cells-of-dataframe/
Python pandas dataframe и excel: добавьте цвет фона ячейки а>
Все эти разговоры об использовании openpyxml со стилем. Моя задача заключается в том, что я должен обновить те ячейки, в которых есть изменения на самой фазе сравнения, и это (окраска) должно быть отражено в выводе Excel. Как мне этого добиться? надеюсь, что кто-нибудь поможет мне найти правильный и лучший метод.
Примечание: мои данные огромны по размеру (около 10000 строк в столбцах строк).
Вход:
DF1:
col1 | col2 | col3 |
---|---|---|
10 | Yes | BNG |
12 | PE | CHN |
30 | LIKE | DHL |
DF2:
col1 | col2 | col3 |
---|---|---|
10 | No | BNG |
13 | PE | CHI |
30 | SNM | DHL |
Выходные данные должны быть в формате Excel с ячейками, окрашенными таким образом.
Мой код здесь:
'''
def split_compare_differ_df(difference_in_df):
bg_delete = "background-color: red"
bg_insert = "background-color: blue"
unique_of_df1 = df1
unique_of_df2 = df2
for i in unique_of_df1.itertuples():
for j in unique_of_df2.itertuples():
if i[1] == j[1]:
for idx, (a, b) in enumerate(zip(i, j)):
x=list(i)
y=list(j)
if not idx ==0:
if a == b:
x[idx] = a
y[idx] = b
print(f'Index {idx} match: {a}')
else:
x[idx] = '{}{}'.format(bg_delete,a)
y[idx] = '{}{}'.format(bg_insert, b)
print(f'Index {idx} no match: {a} vs {b}')
# targetFileActiveSheet.cell(row=rowNum, column=colNum).fill = PatternFill(bgColor='FFEE08', fill_type = 'solid')
i = tuple(x)
j = tuple(y)
i_list = list(i)
i_list = i_list[1:]
i_tuple = tuple(i_list)
j_list = list(j)
j_list = j_list[1:]
j_tuple = tuple(j_list)
unique_of_df1.loc[i[0]] = i_tuple
unique_of_df2.loc[j[0]] = j_tuple
return(unique_of_df1,unique_of_df2)
'''