一个表格,里面是按义工名称填写的可以值班的时间表。 ![]() 在排班的时候,需要按照时间来排序,统计有哪些义工可以值班。 这项工作手动操作非常繁琐,耗费时间,来交给ChatGPT吧。在ChatGPT中输入提示词: E盘有一个表格:义工值班时间.xlsx 表格的第1行第1列到第1行第45列是家长义工的姓名,如:赵钱孙; 表格的第2行第1列到第2行第45列是家长义工可以值班的时间,如: 周二 16:30-17:00,周三 16:30-17:00,周四 16:30-17:00 将这个表格里面的数据按照家长义工可以值班的时间进行统计,统计不同时间段可以值班的家长姓名,然后生成一个新表格:new义工值班时间.xlsx 表格第1行第1列到第1行第10列是家长义工的值班时间:周一 11:35-12:00,周二 11:35-12:00,周三 11:35-12:00,周四 11:35-12:00,周五 11:35-12:00,周一 16:30-17:00,周二 16:30-17:00,周三 16:30-17:00,周四 16:30-17:00,周五 16:30-17:00 第2行第1列到第2行第10列是可以值班的家长义工; 义工值班时间.xlsx表中的数据样例如下: XXX周一 11:35-12:00,周二 11:35-12:00,周三 11:35-12:00,周四 11:35-12:00,周五 11:35-12:00 YYY周二 11:35-12:00 ZZZ周五 16:30-17:00 new义工值班时间.xlsx 的数据样例如下: 周一 11:35-12:00 XXX, 周二 11:35-12:00 XXX,YYY 周三 11:35-12:00 XXX 注意: 某些家长的时间段为空,这种情况就进行随机安排; pandas.DataFrame.append 在未来的 pandas 版本中将被弃用,建议使用 pandas.concat 来替换; 在处理值班时间时要检测是否为空,如果为空则跳过,不进行拆分操作; 每一个步骤都要输出相关信息; ChatGPT给出的源代码如下: import pandas as pd import numpy as np # 读取原始的 Excel 文件 df = pd.read_excel('E:/义工值班时间.xlsx', header=None) print("读取原始的Excel文件完成") # 创建一个新的 DataFrame 来保存新的数据 new_df = pd.DataFrame(columns=['Time', 'Volunteers']) # 对原始的 DataFrame 进行迭代,统计各个时间段的义工 for _, row in df.iterrows(): volunteer = row[0] if pd.isna(row[1]): # 检查时间是否为空,如果为空则跳过 continue times = row[1].split(',') for time in times: if time not in new_df['Time'].values: # 使用 pandas.concat 替换 DataFrame.append new_df = pd.concat([new_df, pd.DataFrame({'Time': [time], 'Volunteers': [volunteer]})], ignore_index=True) else: new_df.loc[new_df['Time'] == time, 'Volunteers'] += ',' + volunteer print("按照家长义工可以值班的时间进行统计完成") # 找出时间段为空的家长 empty_volunteers = df[df[1].isna()][0].values # 对于每一个时间段为空的家长,随机分配一个时间段 for volunteer in empty_volunteers: random_time = np.random.choice(new_df['Time'].values) new_df.loc[new_df['Time'] == random_time, 'Volunteers'] += ',' + volunteer print("对于时间段为空的家长进行随机安排完成") # 保存新的 DataFrame 为新的 Excel 文件 new_df.to_excel('E:/new义工值班时间.xlsx', index=False, header=False) print("新的Excel文件已保存") ![]() 程序运行成功,表格数据按照要求统计好了: ![]() |
|