Я хотел бы раскрасить отдельные ячейки кадра данных на основе определенных значений допуска, и я попробовал несколько способов сделать это, но по какой-то причине я не могу понять, почему Jupyter Notebook не использует цветовое кодирование моего кадра данных.
Стиль панд: https://pandas.pydata.org/pandas-docs/stable/user_guide/style.html
У меня есть следующая таблица, и я готов перебирать строки: [row, 1: 6] .
|Parameter| Method 1 | Method 2 | Method 3 | Method 4 | Method 5 | Weighing % |
|Parameter 1| **99.6 | 100 | 100 | 99.8 | 100** | 25 |
|Parameter 2| **0.4 | 0 | 0 | 0.2 | 0** | 5 |
|Parameter 3| **100 | 100 | 100 | 100 | 100** | 5 |
|Parameter 4| **1.3 | 1.2 | 1.1 | 0.9 | 1.4** | 2.5 |
Для каждого параметра есть значения допуска, с которыми следует сравнивать значение в ячейке. На основании сравнения для ячейки будет выбран определенный цвет.
Значение ячейки и значения допуска:
values_for_comparison = [cell value, tolerance_1st_min, tolerance_1st_max, tolerance_2nd_min, tolerance_2nd_max, tolerance_3rd_min, tolerance_3rd_max, tolerance_4th_min, tolerance_4th_max, tolerance_5th_min]
В основной программе:
o = 0
rows_length_table3_df = table3_df.shape[0]
p = 1
columns_length_table3 = all_table1s.shape[1]
q = 1
while o < rows_length_table3_df:
while q < columns_length_table3:
value = table3_df.iloc[o, p]
values_for_comparison = [value,
tolerance_values_conclusions_tables_df.iloc[o, 1],
tolerance_values_conclusions_tables_df.iloc[o, 2],
tolerance_values_conclusions_tables_df.iloc[o, 3],
tolerance_values_conclusions_tables_df.iloc[o, 4],
tolerance_values_conclusions_tables_df.iloc[o, 5],
tolerance_values_conclusions_tables_df.iloc[o, 6],
tolerance_values_conclusions_tables_df.iloc[o, 7],
tolerance_values_conclusions_tables_df.iloc[o, 8],
tolerance_values_conclusions_tables_df.iloc[o, 9]]
table3_df.style.applymap(comparison_conclusions.colors_tables(values_for_comparison), subset = [table3_df.iloc[o, p]])
p += 1
q += 1
p = 1
q = 1
o += 1
values_for_comparison = [None] * 10
exec("table3_df.to_csv(os.path.join(conclusions_folder_path, r'{0}_{1}_Visits_Conclusions_Statistics_Table3.csv'))".format(name_of_the_reference_point_folder, total_number_of_visits_at_the_reference_point))
print(table3_df)
Определение цвета для отдельной ячейки (val) на основе значений допуска (values_for_comparison list[1:]
):
def colors_tables(values_for_comparison):
print('colors_tables')
def colors_tables_by_val(val, values_for_comparison):
print('colors_tables_by_val')
if values_for_comparison[2] < values_for_comparison[1]:
if val <= values_for_comparison[1] and val >= values_for_comparison[2]:
color = 'forestgreen'
elif val < values_for_comparison[3] and val >= values_for_comparison[4]:
color = 'greenyellow'
elif val < values_for_comparison[5] and val >= values_for_comparison[6]:
color = 'yellow'
elif val < values_for_comparison[7] and val >= values_for_comparison[8]:
color = 'orange'
elif val < values_for_comparison[9]:
color = 'red'
else:
color = 'white'
print(color)
return 'background-color: {}'.format(color)
else:
if val >= 0 and val <= values_for_comparison[2]:
color = 'forestgreen'
elif val > values_for_comparison[3] and val <= values_for_comparison[4]:
color = 'greenyellow'
elif val > values_for_comparison[5] and val <= values_for_comparison[6]:
color = 'yellow'
elif val > values_for_comparison[7] and val <= values_for_comparison[8]:
color = 'orange'
elif val > values_for_comparison[9]:
color = 'red'
else:
color = 'white'
print(color)
return 'background-color: {}'.format(color)
val = values_for_comparison[0]
colors_tables_by_val(val, values_for_comparison)
return colors_tables_by_val
Цвета не применяются ни к каким ячейкам в основной программе, но цвета печатаются.
Как правильно написать код? И хотя бы эта часть кода:
table3_df.style.applymap(comparison_conclusions.colors_tables(values_for_comparison), subset = [table3_df.iloc[o, p]])
ОБНОВЛЕНИЕ 20190708
Я изменил код на следующий, но все еще не получаю цвета, примененные к table3_df
. Цвета напечатаны, хотя:
o = 0
rows_length_table3_df = table3_df.shape[0]
p = 1
columns_length_table3 = all_table1s.shape[1]
q = 1
while o < rows_length_table3_df:
while q < columns_length_table3:
values_for_comparison = [tolerance_values_conclusions_tables_df.iloc[o, 1],
tolerance_values_conclusions_tables_df.iloc[o, 2],
tolerance_values_conclusions_tables_df.iloc[o, 3],
tolerance_values_conclusions_tables_df.iloc[o, 4],
tolerance_values_conclusions_tables_df.iloc[o, 5],
tolerance_values_conclusions_tables_df.iloc[o, 6],
tolerance_values_conclusions_tables_df.iloc[o, 7],
tolerance_values_conclusions_tables_df.iloc[o, 8],
tolerance_values_conclusions_tables_df.iloc[o, 9]]
value = table3_df.iloc[o, p]
def colors_tables(value):
val = value
print('colors_tables')
if values_for_comparison[1] < values_for_comparison[0]:
if val <= values_for_comparison[0] and val >= values_for_comparison[1]:
color = 'forestgreen'
elif val < values_for_comparison[2] and val >= values_for_comparison[3]:
color = 'greenyellow'
elif val < values_for_comparison[4] and val >= values_for_comparison[5]:
color = 'yellow'
elif val < values_for_comparison[6] and val >= values_for_comparison[7]:
color = 'orange'
elif val < values_for_comparison[8]:
color = 'red'
else:
color = 'white'
print(color)
return 'background-color: %s' % color
else:
if val >= 0 and val <= values_for_comparison[1]:
color = 'forestgreen'
elif val > values_for_comparison[2] and val <= values_for_comparison[3]:
color = 'greenyellow'
elif val > values_for_comparison[4] and val <= values_for_comparison[5]:
color = 'yellow'
elif val > values_for_comparison[6] and val <= values_for_comparison[7]:
color = 'orange'
elif val > values_for_comparison[8]:
color = 'red'
else:
color = 'white'
print(color)
return 'background-color: %s' % color
table3_df.style.applymap(colors_tables(value), subset = (o, p))
p += 1
q += 1
p = 1
q = 1
o += 1
values_for_comparison = [None] * 9
exec("table3_df.to_csv(os.path.join(conclusions_folder_path, r'{0}_{1}_Visits_Conclusions_Statistics_Table3.csv'))".format(name_of_the_reference_point_folder, total_number_of_visits_at_the_reference_point))
print(table3_df)