Update app.py
Browse files
app.py
CHANGED
|
@@ -1,37 +1,63 @@
|
|
| 1 |
import pandas as pd
|
| 2 |
-
import random
|
| 3 |
import gradio as gr
|
| 4 |
-
import os
|
| 5 |
|
| 6 |
-
def group_names(file, members_per_group):
|
| 7 |
# Read the CSV file
|
| 8 |
df = pd.read_csv(file.name, encoding='utf-8')
|
| 9 |
|
| 10 |
-
#
|
| 11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
|
| 13 |
-
#
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
|
| 18 |
# Creating a new DataFrame for grouped data
|
| 19 |
-
|
| 20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
|
| 22 |
return grouped_df
|
| 23 |
|
| 24 |
-
def main_interface(file, members_per_group):
|
| 25 |
-
grouped_df = group_names(file, members_per_group)
|
| 26 |
# Save the DataFrame to a CSV file with UTF-8 encoding
|
| 27 |
output_filename = '/tmp/grouped_names.csv'
|
| 28 |
grouped_df.to_csv(output_filename, index=False, encoding='utf-8-sig')
|
| 29 |
-
# Return both the DataFrame for display and the file path for downloading
|
| 30 |
return grouped_df, output_filename
|
| 31 |
|
| 32 |
iface = gr.Interface(
|
| 33 |
fn=main_interface,
|
| 34 |
-
inputs=[
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
outputs=[gr.Dataframe(label="Grouped Names"), gr.File(label="Download Grouped Names CSV")],
|
| 36 |
allow_flagging="never"
|
| 37 |
)
|
|
|
|
| 1 |
import pandas as pd
|
|
|
|
| 2 |
import gradio as gr
|
|
|
|
| 3 |
|
| 4 |
+
def group_names(file, members_per_group, fixed_groups_input):
|
| 5 |
# Read the CSV file
|
| 6 |
df = pd.read_csv(file.name, encoding='utf-8')
|
| 7 |
|
| 8 |
+
# Parse fixed groups input
|
| 9 |
+
fixed_groups = [group.strip() for group in fixed_groups_input.split(';') if group.strip()]
|
| 10 |
+
fixed_groups_df_list = []
|
| 11 |
+
remaining_df = df.copy()
|
| 12 |
+
|
| 13 |
+
# Process fixed groups and create a list for additional members to be added
|
| 14 |
+
for group in fixed_groups:
|
| 15 |
+
group_names = [name.strip() for name in group.split(',') if name.strip()]
|
| 16 |
+
# Find these names in the DataFrame
|
| 17 |
+
matched_rows = remaining_df[remaining_df['Names'].isin(group_names)]
|
| 18 |
+
fixed_groups_df_list.append(matched_rows)
|
| 19 |
+
# Remove these names from the pool of remaining names
|
| 20 |
+
remaining_df = remaining_df[~remaining_df['Names'].isin(group_names)]
|
| 21 |
+
|
| 22 |
+
# Shuffle the remaining DataFrame
|
| 23 |
+
remaining_df = remaining_df.sample(frac=1).reset_index(drop=True)
|
| 24 |
|
| 25 |
+
# Adjusting fixed groups to include additional members if they're under the specified group size
|
| 26 |
+
for i, group_df in enumerate(fixed_groups_df_list):
|
| 27 |
+
while len(group_df) < members_per_group and not remaining_df.empty:
|
| 28 |
+
group_df = pd.concat([group_df, remaining_df.iloc[[0]]])
|
| 29 |
+
remaining_df = remaining_df.iloc[1:].reset_index(drop=True)
|
| 30 |
+
fixed_groups_df_list[i] = group_df # Update the group with added members
|
| 31 |
+
|
| 32 |
+
# Grouping the remaining names
|
| 33 |
+
groups = fixed_groups_df_list # Start with adjusted fixed groups
|
| 34 |
+
for i in range(0, len(remaining_df), members_per_group):
|
| 35 |
+
groups.append(remaining_df[i:i + members_per_group])
|
| 36 |
|
| 37 |
# Creating a new DataFrame for grouped data
|
| 38 |
+
grouped_data = []
|
| 39 |
+
for i, group in enumerate(groups):
|
| 40 |
+
group_name = f'Group {i+1}'
|
| 41 |
+
names = ', '.join(group['Names'].tolist())
|
| 42 |
+
grouped_data.append({'Group': group_name, 'Members': names})
|
| 43 |
+
grouped_df = pd.DataFrame(grouped_data)
|
| 44 |
|
| 45 |
return grouped_df
|
| 46 |
|
| 47 |
+
def main_interface(file, members_per_group, fixed_groups_input):
|
| 48 |
+
grouped_df = group_names(file, members_per_group, fixed_groups_input)
|
| 49 |
# Save the DataFrame to a CSV file with UTF-8 encoding
|
| 50 |
output_filename = '/tmp/grouped_names.csv'
|
| 51 |
grouped_df.to_csv(output_filename, index=False, encoding='utf-8-sig')
|
|
|
|
| 52 |
return grouped_df, output_filename
|
| 53 |
|
| 54 |
iface = gr.Interface(
|
| 55 |
fn=main_interface,
|
| 56 |
+
inputs=[
|
| 57 |
+
gr.File(label="Upload CSV File"),
|
| 58 |
+
gr.Number(label="Members per Group", value=4),
|
| 59 |
+
gr.Textbox(label="Fixed Groups (separated by semicolon)", placeholder="Name1, Name2; Name3, Name4", value=""),
|
| 60 |
+
],
|
| 61 |
outputs=[gr.Dataframe(label="Grouped Names"), gr.File(label="Download Grouped Names CSV")],
|
| 62 |
allow_flagging="never"
|
| 63 |
)
|