grouping / app.py
MK-316's picture
Update app.py
c746d07 verified
raw
history blame
1.35 kB
import pandas as pd
import random
import gradio as gr
import os
def group_names(file, members_per_group):
# Read the CSV file
df = pd.read_csv(file.name, encoding='utf-8')
# Shuffle the DataFrame
df = df.sample(frac=1).reset_index(drop=True)
# Grouping
groups = []
for i in range(0, len(df), members_per_group):
groups.append(df[i:i + members_per_group])
# Creating a new DataFrame for grouped data
grouped_df = pd.DataFrame({'Group': [f'Group {i+1}' for i, group in enumerate(groups)],
'Names': [', '.join(group['Names'].tolist()) for group in groups]})
return grouped_df
def main_interface(file, members_per_group):
grouped_df = group_names(file, members_per_group)
# Save the DataFrame to a CSV file with UTF-8 encoding
output_filename = '/tmp/grouped_names.csv'
grouped_df.to_csv(output_filename, index=False, encoding='utf-8-sig')
# Return both the DataFrame for display and the file path for downloading
return grouped_df, output_filename
iface = gr.Interface(
fn=main_interface,
inputs=[gr.File(label="Upload CSV File"), gr.Number(label="Members per Group", value=5)],
outputs=[gr.Dataframe(label="Grouped Names"), gr.File(label="Download Grouped Names CSV")],
allow_flagging="never"
)
iface.launch()