一个表格,里面是按义工名称填写的可以值班的时间表。
在排班的时候,需要按照时间来排序,统计有哪些义工可以值班。
这项工作手动操作非常繁琐,耗费时间,来交给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文件已保存")
程序运行成功,表格数据按照要求统计好了: