|
import pandas as pd |
|
import gradio as gr |
|
|
|
|
|
def convert_schedule(file_path, direction): |
|
|
|
df = pd.read_excel(file_path, header=[0,1], index_col=0) |
|
|
|
|
|
df.columns = df.columns.get_level_values(1).astype(str) |
|
|
|
|
|
df = df.loc[:, ~df.columns.str.match(r'^Unnamed')] |
|
|
|
|
|
index_name = df.index.name or 'index' |
|
|
|
|
|
if direction == 'A to B': |
|
|
|
id_col = 'Model' |
|
val_col = 'Texter' |
|
df_reset = df.reset_index().rename(columns={index_name: id_col}) |
|
else: |
|
|
|
id_col = 'Texter' |
|
val_col = 'Model' |
|
df_reset = df.reset_index().rename(columns={index_name: id_col}) |
|
|
|
|
|
df_melt = df_reset.melt(id_vars=[id_col], var_name='Day', value_name=val_col) |
|
|
|
df_melt = df_melt.dropna(subset=[val_col]) |
|
|
|
|
|
pivot = df_melt.pivot_table( |
|
index=val_col, |
|
columns='Day', |
|
values=id_col, |
|
aggfunc='first' |
|
) |
|
|
|
|
|
result = pivot.reindex(columns=df.columns.tolist(), fill_value='') |
|
|
|
|
|
result.index.name = None |
|
result.columns.name = None |
|
return result |
|
|
|
|
|
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) |