File size: 1,921 Bytes
cdf2807 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
import pandas as pd
import gradio as gr
def convert_schedule(file, direction):
# Read the uploaded Excel file; use the first column as index
df = pd.read_excel(file.name if hasattr(file, 'name') else file, index_col=0)
if direction == "A to B":
# A->B: models in rows, texters in cells -> texters as rows, models as cell values
df_reset = df.reset_index()
model_col = df_reset.columns[0]
df_melt = df_reset.melt(id_vars=[model_col], var_name='Header', value_name='Texter')
df_melt = df_melt.dropna(subset=['Texter'])
df_pivot = df_melt.pivot(index='Texter', columns='Header', values=model_col)
df_pivot = df_pivot.reindex(columns=df.columns).fillna("")
result = df_pivot
else:
# B->A: texters in rows, models in cells -> models as rows, texters as cell values
df_reset = df.reset_index()
texter_col = df_reset.columns[0]
df_melt = df_reset.melt(id_vars=[texter_col], var_name='Header', value_name='Model')
df_melt = df_melt.dropna(subset=['Model'])
df_pivot = df_melt.pivot(index='Model', columns='Header', values=texter_col)
df_pivot = df_pivot.reindex(columns=df.columns).fillna("")
result = df_pivot
# Save to Excel for download
out_file = "converted_schedule.xlsx"
result.to_excel(out_file)
return result, out_file
# Build Gradio interface
iface = gr.Interface(
fn=convert_schedule,
inputs=[
gr.File(label="Upload Schedule Excel (Format A or B)"),
gr.Radio(["A to B", "B to A"], label="Conversion Direction")
],
outputs=[
gr.Dataframe(label="Converted Schedule"),
gr.File(label="Download Converted Excel")
],
title="Schedule Format Converter",
description="Dynamically convert between two schedule formats: models-as-rows ↔ texters-as-rows."
)
if __name__ == "__main__":
iface.launch()
|