# 需求:将Excel中的任务均等分配给多个人?在Excel中新增一列分配任务的每个人的人名。
# 1)将一个大的Excel等扽拆成多个Excel,使用df.iloc方法,将一个大的dataframe,拆分成多个小的dataframe
# 将使用dataframe.to_excel保存每个小Excel
# 计算拆分后的每隔excel的行数
# 1.1)将一个大excel 拆分给这几个人
user_names = ['xiao_shuai', 'xiao_wang', 'xiaoming', 'xiao_lei', 'xiao_bo', 'xiao_hong']
# 1.2)计算每个人的任务数目 除法向下取整
split_size = total_row_count // len(user_names)
if total_row_count % len(user_names) != 0:
split_size += 1
split_size
# 1.3)拆分成多个dataframe
df_subs = []
for idx, user_name in enumerate(user_names):
begin = idx * split_size # iloc的开始索引
end = begin + split_size # iloc的结束索引
df_sub = df_source.iloc[begin:end] # 实现df按照iloc拆分
df_subs.append((idx, user_name, df_sub)) # 将每个子df存入列表
for idx, user_name, df_sub in df_subs:
file_name = f'{splits_dir}/split_{idx}_{user_name}.xlsx'
df_sub.to_excel(file_name, index=False)
# 2)合并多个小Excel到一个大Excel
# 2.1)遍历文件夹,得到要合并的Excel文件列表
excel_names = []
for excel_name in os.listdir(splits_dir):
excel_names.append(excel_name)
# 2.2)分别读取到dataframe,给每个df添加一行用于标记来源
df_list = []
for excel_name in excel_names:
excel_path = f'{splits_dir}/{excel_name}'
df_split = pd.read_excel(excel_path)
user_name = excel_name.replace('split_', '').replace('.xlsx', '')[2:]
print(excel_name, user_name)
df_split['username'] = user_name # 给每隔df添加1列,即用户名字
df_list.append(df_split)
# 2.3)使用pd.concat进行df批量合并
df_merged = pd.concat(df_list)
df_merged['username'].value_counts()
# 2.4)将合并后的dataframe输出到excel
df_merged.to_excel(f'{work_dir}/merged_data.xlsx', index=False)