formatter / app.py
kreemyyyy's picture
Update app.py
a3de3da verified
raw
history blame
2.61 kB
import pandas as pd
import gradio as gr
# Pivot between Model↔Texter schedules (7-day weekly format)
def convert_schedule(file_path, direction):
# 1. Load schedule: first column is index; use two header rows to capture proper day labels
df = pd.read_excel(file_path, header=[0,1], index_col=0)
# Combine multi-index headers: take the second row (actual day names)
# level 0 may contain merged group labels (e.g., timeslot), level 1 has actual dates/days
df.columns = df.columns.get_level_values(1).astype(str)
# Drop any 'Unnamed' or blank day columns
df = df.loc[:, ~df.columns.str.match(r'^Unnamed')]
# Determine the name of the index column after reset_index()()
index_name = df.index.name or 'index'
# 2. Setup melting parameters based on direction
if direction == 'A to B':
# A-format: models in index, texters in cells → output: texters as rows, models as cell values
id_col = 'Model'
val_col = 'Texter'
df_reset = df.reset_index().rename(columns={index_name: id_col})
else:
# B-format: texters in index, models in cells → output: models as rows, texters as cell values
id_col = 'Texter'
val_col = 'Model'
df_reset = df.reset_index().rename(columns={index_name: id_col})
# 3. Melt into long form: [id_col, Day, val_col]
df_melt = df_reset.melt(id_vars=[id_col], var_name='Day', value_name=val_col)
# Drop empty assignments
df_melt = df_melt.dropna(subset=[val_col])
# 4. Pivot back to wide: index=val_col, columns=Day, values=id_col
pivot = df_melt.pivot_table(
index=val_col,
columns='Day',
values=id_col,
aggfunc='first'
)
# 5. Reorder columns to match original days order and fill empties
result = pivot.reindex(columns=df.columns.tolist(), fill_value='')
# Cleanup axis names for display
result.index.name = None
result.columns.name = None
return result
# Build Gradio app
iface = gr.Interface(
fn=convert_schedule,
inputs=[
gr.File(label='Upload Weekly Schedule (.xlsx)', file_count='single', type='filepath'),
gr.Radio(['A to B', 'B to A'], label='Convert Direction')
],
outputs=gr.Dataframe(label='Converted Schedule'),
title='7-Day Schedule Pivot',
description=(
'Upload a 7-column weekly schedule (Models vs Days), then flip between '
'Models→Texters or Texters→Models. Maintains original days order.'
),
allow_flagging='never'
)
if __name__ == '__main__':
iface.launch(server_name='0.0.0.0', server_port=7860)