在 python pandas 中获取每张票的唯一计数以及每个分配队列中的天数

Getting unique count of each ticket along with No of days in each assignment queue in python pandas

我正在创建小型 POC,它将告诉我每张票在每个不同的团队中保留了多少天。 (L1, L2为队名)

我假设您已经将 Excel 文件读入 DataFrame 并且 工单使用天数 其中的列包含空字符串 或一个数字(不是 NaN),就像你的照片一样。

从生成临时 DataFrame 开始:

wrk = df.groupby(['Ticket No', 'Assignment queue']).Status.count()\
    .unstack().fillna(0, downcast='infer')
wrk.columns.name = None

您的数据样本的结果是:

           L1  L2
Ticket No        
INC001      1   3
INC002      3   1
INC003      4   0
INC004      1   3

要得到结果,运行:

result = wrk.add_prefix('No of days in ').add_suffix(' Queue')\
    .join(df.groupby('Ticket No')['Age of ticket in days'].last()
    .rename('Total number of days for resolution'))\
    .reset_index()

结果是:

  Ticket No  No of days in L1 Queue  No of days in L2 Queue  Total number of days for resolution 
0    INC001                       1                       3                                    4  
1    INC002                       3                       1                                       
2    INC003                       4                       0                                    4  
3    INC004                       1                       3                                    4  

编辑

如果源 DataFrame 中的天数 列包含 NaNs,需要稍作修正:在last()后加上.fillna('')即可。

关于源数据的备注(在您的评论之后)

请注意,每一行都说明了每个任务的分配顺序 票,没有分配特定票的实际日期,并且 然后传递给另一个团队(或完成)。

这就是为什么:

  • 我假设每一行都类似于“在末尾的报告” 连续的一天。
  • wrk的计算方式实际上是count多少行 特定的票被分配给每个团队(假设“每行 1 日”规则)。
  • 另一方面,机票年龄显然没有任何 定义连接到上述规则。它应该等于 特定票的行数,但我不知道这是否 在每种情况下(对于每张票)都遵守规则。

对于您的示例数据,不存在此类差异,但在其他情况下 可能出现的行数。

或者您的 DataFrame 应该在每一行中包含:

  • "start date" - 当这张票被分配给这个团队时,
  • "end date" - 当这张票被分配给某些人时 其他团队或完成。

然后:

  • 具有相同开始结束日期的行不应计算在内,
  • 每行应 "contribute"(对有问题的团队)编号 endstart 日期之间的差异导致的天数。

在这种情况下,不需要最后一列。