计算给定时间点的老票证

问题描述 投票:1回答:1

背景:我们有一个票务系统,每个票证都有诸如打开日期,关闭日期,类别,类型等字段。每张票证在我的数据中由一行表示,并带有一个用于标识该票证的密钥。

单个记录可能看起来像:

Number, Type, Category, Opened, Closed
TICKET100, Database, Software, 2/1/2020 11:30 AM, 4/22/2020 4:40 PM

目标:我的目标是创建一个接受输入数据框(熊猫),某种类型的输入年龄参数以及属性/维度列表的函数。然后,该函数将根据该年龄参数(按日期/属性/维度)返回一个数据框,该数据框基于该年龄参数打开了超过特定年龄的票证。

输入示例:

ticket_age(input_dataframe, age=5, dimensions=['Type','Category'])

所需输出的示例片段:

Date, Type, Category, Count
3/1/2020, Database, Software, 1
3/2/2020, Database, Software, 1
...
4/22/2020, Database, Software, 0

关于输出的重要说明...如果日期和维度的交集没有任何满足条件的票证,它将创建一个计数为0的行。

我被困的地方:我不知道如何接受未知大小的列表的尺寸并遍历所有尺寸。

我尝试了什么?在对循环进行硬编码时,我一直成功生成符合年龄标准的票数。

我如何计算类型列表,初次日期和总天数:

    #Create function to find the minimum date
def date_minimum(input_dataframe, date_to_check):
    return input_dataframe[date_to_check].min().date()

#Create function to find the maximum date
def date_maximum(input_dataframe,date_to_check):
    return input_dataframe[date_to_check].max().date()

    #setup min and max dates
    min_date=date_minimum(df_aged_input,'Opened')
    max_date=date_maximum(df_aged_input,'Closed')
    #Get the first relevant date for the dataframe loop
    first_date=min_date+datetime.timedelta(days=aged_window)

    # Generate a list of unique assignment groups
    type_list=df_aged_input['Type'].unique().tolist()

我的循环

aged_output_list=[]
for type_iterate in range(len(type_list)):
    #filter by the type
    aged_type=type_list[type_iterate]
    df_aged_input=df_tkt_relevant[df_tkt_relevant['Type']==aged_type].copy()
    for date_iterate in range(totalDays.days):
        #generate the aged date iterator
        aged_date=first_date+datetime.timedelta(days=date_iterate)
        #Count the number of records in the data frame that match the input conditions
        aged_frame=df_aged_input[(~(df_aged_input['Closed'].dt.date<aged_date))&(df_aged_input['Opened'].dt.date<(aged_date-datetime.timedelta(days=aged_window+1)))].copy()
        aged_frame['aged_Date']=aged_date-datetime.timedelta(days=1)
        aged_count=aged_frame.shape[0]
        #Write the date from iterative date and the aged count to a new data source
        aged_output_list.append([aged_date,aged_type or 'Error: Missing Type',aged_count])

接下来我要做什么?是否还有另一个图书馆可以为我完成所有这些工作?

python python-3.x pandas
1个回答
0
投票

IIUC

© www.soinside.com 2019 - 2024. All rights reserved.