编写Pandas函数实现工单系统按日期分类统计创建/关闭量
自动化实现工单系统工作日分类统计的Pandas函数
核心思路
替代手动复制代码的低效方式,通过Pandas的分组、重索引和合并操作,一次性完成22个分类、2个月工作日的创建/关闭工单统计,确保输出格式统一且无重复劳动。
完整函数实现
假设你的原始工单DataFrame包含创建日期(datetime类型)、关闭日期(datetime类型)、工单分类(字符串类型,共22个固定分类)三个核心字段,函数实现如下:
import pandas as pd def workday_ticket_stats(raw_df, start_date, end_date): # 1. 生成指定时间范围内的所有工作日序列 workdays = pd.date_range(start=start_date, end=end_date, freq='B') workday_dates = workdays.date # 转换为date类型,匹配后续分组的日期格式 # 2. 统计每日各分类的工单创建数 create_counts = ( raw_df.assign(创建日期=lambda x: x['创建日期'].dt.date) .groupby(['创建日期', '工单分类']) .size() .unstack(fill_value=0) # 把分类转成列,缺失值填0 .reindex(workday_dates, fill_value=0) # 对齐到工作日序列,补全缺失日期 ) # 3. 统计每日各分类的工单关闭数(过滤未关闭的工单) close_counts = ( raw_df.dropna(subset=['关闭日期']) .assign(关闭日期=lambda x: x['关闭日期'].dt.date) .groupby(['关闭日期', '工单分类']) .size() .unstack(fill_value=0) .reindex(workday_dates, fill_value=0) ) # 4. 重命名列,区分创建/关闭统计 create_counts.columns = [f"{cat}_创建数" for cat in create_counts.columns] close_counts.columns = [f"{cat}_关闭数" for cat in close_counts.columns] # 5. 合并结果并整理格式 result = pd.concat([create_counts, close_counts], axis=1).reset_index() result = result.rename(columns={'index': '工作日'}) # 6. 确保所有22个分类的统计列都存在(避免部分分类无工单时列缺失) fixed_categories = raw_df['工单分类'].unique() # 如果分类固定,可直接写死列表,比如['分类1', '分类2', ..., '分类22'] required_columns = ['工作日'] for cat in fixed_categories: required_columns.extend([f"{cat}_创建数", f"{cat}_关闭数"]) # 填充缺失的列,值设为0 for col in required_columns: if col not in result.columns: result[col] = 0 # 按指定列顺序排序,保证输出格式统一 result = result[required_columns] return result
使用示例
# 先确保日期字段是datetime类型(如果原始数据是字符串) raw_df['创建日期'] = pd.to_datetime(raw_df['创建日期']) raw_df['关闭日期'] = pd.to_datetime(raw_df['关闭日期']) # 调用函数,统计2024年3-4月的工作日工单数据 stats_result = workday_ticket_stats(raw_df, start_date='2024-03-01', end_date='2024-04-30')
关键优势
- 彻底替代手动复制:无需为22个分类逐个写统计代码,一次分组即可覆盖所有分类
- 自动补全工作日:通过
freq='B'自动生成工作日序列,无需手动枚举日期 - 格式严格统一:强制保证所有分类的创建/关闭列都存在,缺失数据自动填0,输出格式完全符合要求
- 可维护性强:后续新增/修改分类,只需调整
fixed_categories(或自动从原始数据读取),无需修改核心统计逻辑
内容的提问来源于stack exchange,提问作者Tus Oir
相关产品推荐
相关产品推荐

