You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:52:45