Как условно форматировать данные в больших таблицах?Python

Программы на Python
Ответить
Anonymous
 Как условно форматировать данные в больших таблицах?

Сообщение Anonymous »

Я пытаюсь условно отформатировать данные таблицы с помощью Great Tables, но не знаю, как это сделать.
Чтобы выделить цвет всех тех ячеек (своего рода тепловая карта), значения которых выше, чем столбец верхнего диапазона.
Данные:

Код: Выделить всё

import polars as pl

gt_sample_df = pl.DataFrame({'Test': ['Test A','Test B','Test C','Test D','Test Z','Test E','Test F','Test X',
'Test G','Test H','Test I','Test J'],
'Lower Range': [35.3,2.5,85.0,0.0,None,3.0,200.0,None,3.0,400.0,None,7.0],
'Upper Range': [79.5,3.5,150.0,160.0,160.0,5.0,None,200.0,5.0,1000.0,150.0,30.0],
'2024-11-10': [43.0,3.14,135.82,162.7,None,None,206.0,None,4.76,519.52,134.4,26.88],
'2024-08-03': [36.0,4.31,152.98,None,175.5,5.94,None,211.0,None,512.08,112.6,22.52],
'2024-06-17': [47.0,3.38,158.94,None,182.0,4.87,None,229.0,None,550.24,115.3,23.06],
'2024-02-01': [44.0,3.12,136.84,None,154.1,4.51,None,198.0,None,465.04,86.3,17.26],
'2023-10-16': [45.0,3.11,140.14,None,162.0,4.6,None,207.0,None,501.44,109.3,21.86],
'2023-05-15': [42.0,3.8,159.58,None,192.0,5.57,None,234.0,None,597.68,162.1,32.42]})

gt_sample_df
Изображение

Различные столбцы дат в этом фрейме данных gt_sample_df содержат результаты, и я хочу сравнить их с верхним диапазоном и выделить те, чьи значения выше столбца верхнего диапазона. Столбцов с любой датой может быть n, поэтому я не могу использовать статические имена для столбцов.
Я пробовал:

Код: Выделить всё

from great_tables import GT, md, style, loc, google_font

(GT(gt_sample_df)
.tab_style(style=[style.text(color="Navy"), style.fill(color="PaleTurquoise")],
locations=loc.body(columns=pl.exclude(["Test",'Lower Range','Upper Range']),
rows=pl.col(lambda x:  x) > pl.col('Upper Range')))
)

Код: Выделить всё

from great_tables import GT, md, style, loc, google_font

(GT(gt_sample_df)
.tab_style(style=[style.text(color="Navy"), style.fill(color="red")],
locations=loc.body(columns=[3:],
rows=pl.col(lambda x:  x) > pl.col('Upper Range')))
)
Поскольку я хочу выделить только большие значения в столбцах даты, я пытался исключить первые 3 столбца из выбора столбца, но это не сработало, и я не уверен, как автоматически сравнивать значения всех других столбцов даты со столбцом верхнего диапазона.
Обновление:
Выбор столбца. Я могу это сделать, но не могу выбрать правильные строки.

Код: Выделить всё

columns_required = gt_sample_df.select(pl.exclude(["Test",'Lower Range','Upper Range'])).columns

(GT(gt_sample_df)
.tab_style(style=[style.text(color="Navy"), style.fill(color="PaleTurquoise")],

locations=loc.body(columns=columns_required, rows=pl.col(lambda x:  x) > pl.col('Upper Range')))
)

Код: Выделить всё

import polars.selectors as cs

(GT(gt_sample_df)
.tab_style(style=[style.text(color="Navy"), style.fill(color="PaleTurquoise")],

locations=loc.body(columns=cs.starts_with("20"), rows=pl.col(lambda x:  x) > pl.col('Upper Range')))
)

Код: Выделить всё

columns_required = gt_sample_df.select(pl.exclude(["Test",'Lower Range','Upper Range'])).columns

(GT(gt_sample_df)
.tab_style(style=[style.text(color="Navy"), style.fill(color="PaleTurquoise")],
for col_name in columns_required:

locations=loc.body(columns=[col_name],
rows=pl.col(col_name) > pl.col('Upper Range')))
)
это тоже не сработало.
Желаемый результат, вероятно, что-то вроде этого:
Изображение


Подробнее здесь: https://stackoverflow.com/questions/792 ... eat-tables
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»