Wie formatiere ich Daten in Great Tables bedingt?Python

Python-Programme
Anonymous
 Wie formatiere ich Daten in Great Tables bedingt?

Post by Anonymous »

Ich versuche, Tabellendaten mithilfe von Great Tables bedingt zu formatieren, bin mir aber nicht sicher, wie das geht.
Um die Farbe aller Zellen hervorzuheben (eine Art Heatmap), deren Werte höher als die Spalte „Oberer Bereich“ sind.
Daten:

Code: Select all

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
Image

Die verschiedenen Datumsspalten in diesem Datenrahmen gt_sample_df enthalten die Ergebnisse und ich möchte sie mit dem oberen Bereich vergleichen und diejenigen hervorheben, deren Werte höher als die Spalte „Oberer Bereich“ sind. Es kann n Datumsspalten mit einem beliebigen Datum geben, daher kann ich keine statischen Namen für Spalten verwenden.
Ich habe versucht:

Code: Select all

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')))
)

Code: Select all

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')))
)
Da ich nur größere Werte in den Datumsspalten hervorheben möchte, habe ich versucht, die ersten drei Spalten in der Spaltenauswahl auszuschließen, aber es hat nicht funktioniert und ich bin mir nicht sicher, wie die Werte aller anderen Datumsspalten automatisch mit der Spalte „Oberer Bereich“ verglichen werden sollen.
Update:
Spaltenauswahl Ich kann es tun, aber nicht die richtigen Zeilen auswählen

Code: Select all

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')))
)

Code: Select all

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')))
)

Code: Select all

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')))
)
das hat auch nicht funktioniert.
Gewünschte Ausgabe wahrscheinlich etwa so:
Image

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post