kreemyyyy commited on
Commit
cf08e9a
·
verified ·
1 Parent(s): a3de3da

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -27
app.py CHANGED
@@ -1,49 +1,49 @@
1
  import pandas as pd
2
  import gradio as gr
3
 
4
- # Pivot between Model↔Texter schedules (7-day weekly format)
5
  def convert_schedule(file_path, direction):
6
- # 1. Load schedule: first column is index; use two header rows to capture proper day labels
7
- df = pd.read_excel(file_path, header=[0,1], index_col=0)
8
- # Combine multi-index headers: take the second row (actual day names)
9
- # level 0 may contain merged group labels (e.g., timeslot), level 1 has actual dates/days
10
- df.columns = df.columns.get_level_values(1).astype(str)
 
 
 
 
 
 
 
 
11
 
12
- # Drop any 'Unnamed' or blank day columns
13
  df = df.loc[:, ~df.columns.str.match(r'^Unnamed')]
14
 
15
- # Determine the name of the index column after reset_index()()
16
- index_name = df.index.name or 'index'
17
-
18
- # 2. Setup melting parameters based on direction
19
  if direction == 'A to B':
20
- # A-format: models in index, texters in cells → output: texters as rows, models as cell values
21
- id_col = 'Model'
22
- val_col = 'Texter'
23
- df_reset = df.reset_index().rename(columns={index_name: id_col})
24
  else:
25
- # B-format: texters in index, models in cells → output: models as rows, texters as cell values
26
- id_col = 'Texter'
27
- val_col = 'Model'
28
- df_reset = df.reset_index().rename(columns={index_name: id_col})
29
 
30
- # 3. Melt into long form: [id_col, Day, val_col]
 
31
  df_melt = df_reset.melt(id_vars=[id_col], var_name='Day', value_name=val_col)
32
- # Drop empty assignments
33
  df_melt = df_melt.dropna(subset=[val_col])
34
 
35
- # 4. Pivot back to wide: index=val_col, columns=Day, values=id_col
36
  pivot = df_melt.pivot_table(
37
  index=val_col,
38
  columns='Day',
39
  values=id_col,
40
- aggfunc='first'
41
  )
 
42
 
43
- # 5. Reorder columns to match original days order and fill empties
44
  result = pivot.reindex(columns=df.columns.tolist(), fill_value='')
45
 
46
- # Cleanup axis names for display
47
  result.index.name = None
48
  result.columns.name = None
49
  return result
@@ -59,10 +59,10 @@ iface = gr.Interface(
59
  title='7-Day Schedule Pivot',
60
  description=(
61
  'Upload a 7-column weekly schedule (Models vs Days), then flip between '
62
- 'Models→Texters or Texters→Models. Maintains original days order.'
63
  ),
64
  allow_flagging='never'
65
  )
66
 
67
  if __name__ == '__main__':
68
- iface.launch(server_name='0.0.0.0', server_port=7860)
 
1
  import pandas as pd
2
  import gradio as gr
3
 
4
+ # Pivot between Model↔Texter schedules (7-day weekly format), handling merged headers
5
  def convert_schedule(file_path, direction):
6
+ # 1. Try reading with two header rows for merged timeslot/day layouts
7
+ try:
8
+ df = pd.read_excel(file_path, header=[0,1], index_col=0)
9
+ # Extract the second-level headers (actual days)
10
+ second_level = df.columns.get_level_values(1).astype(str)
11
+ # If these are all unnamed, fallback
12
+ if all(lbl.startswith('Unnamed') for lbl in second_level):
13
+ raise ValueError
14
+ df.columns = second_level
15
+ except Exception:
16
+ # Fallback: single header row, simple day labels
17
+ df = pd.read_excel(file_path, header=0, index_col=0)
18
+ df.columns = df.columns.astype(str)
19
 
20
+ # 2. Drop any 'Unnamed' or blank header columns
21
  df = df.loc[:, ~df.columns.str.match(r'^Unnamed')]
22
 
23
+ # 3. Determine id/val columns
 
 
 
24
  if direction == 'A to B':
25
+ id_col, val_col = 'Model', 'Texter'
 
 
 
26
  else:
27
+ id_col, val_col = 'Texter', 'Model'
 
 
 
28
 
29
+ # 4. Melt into long format
30
+ df_reset = df.reset_index().rename(columns={df.index.name or df.columns.name or '': id_col})
31
  df_melt = df_reset.melt(id_vars=[id_col], var_name='Day', value_name=val_col)
 
32
  df_melt = df_melt.dropna(subset=[val_col])
33
 
34
+ # 5. Pivot table: join duplicates with comma
35
  pivot = df_melt.pivot_table(
36
  index=val_col,
37
  columns='Day',
38
  values=id_col,
39
+ aggfunc=lambda x: ', '.join(map(str, x))
40
  )
41
+ pivot = pivot.fillna('')
42
 
43
+ # 6. Reorder columns to match original
44
  result = pivot.reindex(columns=df.columns.tolist(), fill_value='')
45
 
46
+ # Cleanup axis names
47
  result.index.name = None
48
  result.columns.name = None
49
  return result
 
59
  title='7-Day Schedule Pivot',
60
  description=(
61
  'Upload a 7-column weekly schedule (Models vs Days), then flip between '
62
+ 'Models→Texters or Texters→Models. Maintains original days order, even with merged headers.'
63
  ),
64
  allow_flagging='never'
65
  )
66
 
67
  if __name__ == '__main__':
68
+ iface.launch(server_name='0.0.0.0', server_port=7860)