背景:我们有一个票务系统,每个票证都有诸如打开日期,关闭日期,类别,类型等字段。每张票证在我的数据中由一行表示,并带有一个用于标识该票证的密钥。
单个记录可能看起来像:
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])
接下来我要做什么?是否还有另一个图书馆可以为我完成所有这些工作?
IIUC