From beab7aa5487b5b19ad61dd1ca628f28cb7f23f6b Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 9 Apr 2024 17:01:47 +0200 Subject: [PATCH] add read_cols_pl --- rowers/dataroutines.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/rowers/dataroutines.py b/rowers/dataroutines.py index 26a63f1d..4943f296 100644 --- a/rowers/dataroutines.py +++ b/rowers/dataroutines.py @@ -1659,6 +1659,44 @@ def prepmultipledata(ids, verbose=False): # pragma: no cover # Read a set of columns for a set of workout ids, returns data as a # pandas dataframe +def read_cols_pl(ids, columns): + extracols = [] + + + columns = list(columns) + ['distance', 'spm', 'workoutid'] + columns = [x for x in columns if x != 'None'] + columns = list(set(columns)) + ids = [int(id) for id in ids] + + df = pl.DataFrame() + + if len(ids) == 0: + return pl.DataFrame() + + df = getsmallrowdata_pl(columns, ids=ids, doclean=False, compute=False) + + if 'peakforce' in columns: + funits = ((w.id, w.forceunit) + for w in Workout.objects.filter(id__in=ids)) + for id, u in funits: + if u == 'lbs': + df = df.with_columns( + peakforce=pl.when(pl.col('workoutid')==id) + .then(pl.col('peakforce') * lbstoN) + .otherwise(pl.col('peakforce'))) + if 'averageforce' in columns: + funits = ((w.id, w.forceunit) + for w in Workout.objects.filter(id__in=ids)) + for id, u in funits: + if u == 'lbs': + df = df.with_columns( + averageforce=pl.when(pl.col('workoutid')==id) + .then(pl.col('averageforce') * lbstoN) + .otherwise(pl.col('averageforce'))) + + + return df, extracols + def read_cols_df_sql(ids, columns, convertnewtons=True): # drop columns that are not in offical list