编写一个有条件地搜索每周跟踪数据的函数的最佳方法是什么,从特定点开始到今天结束
What's the best way to write a function that conditionally searches for data tracked each week, starting at a specific point and ending at today
假设有一个字符串格式的日期列表和 M/D/Y 格式:
li = ['2021-03-25', '021-03-28', '2021-04-01', '2021-04-03', '2021-04-06', '2021-04-09', '2021-04-14', '2021-04-19']
假设我们想创建一个包含列 ['weekOf'、'count'] 的 DataFrame,用于计算这些日期中有多少属于从输入日期开始的特定周。此外,这是一个函数,因此第一个星期一将作为输入。我知道让第一行看起来像这样:
li1 = []
li1.append({'weekOf': (datetime.datetime.strptime(input, '%Y-%m-%d') + datetime.timedelta(days=7)).strftime('%Y-%m-%d'),
'count' : len([x for x in li if (datetime.datetime.strptime(since, '%Y-%m-%d') + datetime.timedelta(days=7))
> x > datetime.datetime.strptime(input, '%Y-%m-%d')])
})
但是如何将其链接起来以使其不断生成新行直到以今天的日期结束?例如:
li1 = []
if datetime.datetime.strptime(input, '%Y-%m-%d') < datetime.date.now:
li1.append({'weekOf': (datetime.datetime.strptime(input, '%Y-%m-%d') + datetime.timedelta(days=7)).strftime('%Y-%m-%d'),
'count' : len([x for x in li if (datetime.datetime.strptime(since, '%Y-%m-%d') + datetime.timedelta(days=7))
> x > datetime.datetime.strptime(input, '%Y-%m-%d')])
})
if (datetime.datetime.strptime(input, '%Y-%m-%d') + datetime.timedelta(days = 7) < datetime.date.now:
li1.append({'weekOf': (datetime.datetime.strptime(input, '%Y-%m-%d') + datetime.timedelta(days=7)).strftime('%Y-%m-%d'),
'count' : len([x for x in li if (datetime.datetime.strptime(since, '%Y-%m-%d') + datetime.timedelta(days=7))
> x > datetime.datetime.strptime(input, '%Y-%m-%d')])
})
if (datetime.datetime.strptime(input, '%Y-%m-%d') + datetime.timedelta(days = 14) < datetime.date.now:
li1.append({'weekOf': (datetime.datetime.strptime(input, '%Y-%m-%d') + datetime.timedelta(days=7)).strftime('%Y-%m-%d'),
'count' : len([x for x in li if (datetime.datetime.strptime(since, '%Y-%m-%d') + datetime.timedelta(days=7))
> x > datetime.datetime.strptime(input, '%Y-%m-%d')])
})
...等等
我想出了一个方法来完成这件事。
li1 = []
#calculates how many weeks the for loop should run based on how many weeks there are from the start date
end = math.floor((datetime.datetime.combine(datetime.date.today(), datetime.datetime.min.time()) -
(datetime.datetime.strptime(input, '%Y-%m-%d'))).days/7)
counter = 0
while counter <= end:
start = datetime.datetime.strptime(input, '%Y-%m-%d') + datetime.timedelta(days = 7 * counter)
li1.append({'weekOf': (start.strftime('%Y-%m-%d')),
'count' : len([x for x in li if (start + datetime.timedelta(days= 7))
> x >= (start)])
})
counter += 1
#Creates dataframe from list of dictionaries
df1 = pd.DataFrame(li1, columns = ['weekOf', 'count'])
return df1
假设有一个字符串格式的日期列表和 M/D/Y 格式:
li = ['2021-03-25', '021-03-28', '2021-04-01', '2021-04-03', '2021-04-06', '2021-04-09', '2021-04-14', '2021-04-19']
假设我们想创建一个包含列 ['weekOf'、'count'] 的 DataFrame,用于计算这些日期中有多少属于从输入日期开始的特定周。此外,这是一个函数,因此第一个星期一将作为输入。我知道让第一行看起来像这样:
li1 = []
li1.append({'weekOf': (datetime.datetime.strptime(input, '%Y-%m-%d') + datetime.timedelta(days=7)).strftime('%Y-%m-%d'),
'count' : len([x for x in li if (datetime.datetime.strptime(since, '%Y-%m-%d') + datetime.timedelta(days=7))
> x > datetime.datetime.strptime(input, '%Y-%m-%d')])
})
但是如何将其链接起来以使其不断生成新行直到以今天的日期结束?例如:
li1 = []
if datetime.datetime.strptime(input, '%Y-%m-%d') < datetime.date.now:
li1.append({'weekOf': (datetime.datetime.strptime(input, '%Y-%m-%d') + datetime.timedelta(days=7)).strftime('%Y-%m-%d'),
'count' : len([x for x in li if (datetime.datetime.strptime(since, '%Y-%m-%d') + datetime.timedelta(days=7))
> x > datetime.datetime.strptime(input, '%Y-%m-%d')])
})
if (datetime.datetime.strptime(input, '%Y-%m-%d') + datetime.timedelta(days = 7) < datetime.date.now:
li1.append({'weekOf': (datetime.datetime.strptime(input, '%Y-%m-%d') + datetime.timedelta(days=7)).strftime('%Y-%m-%d'),
'count' : len([x for x in li if (datetime.datetime.strptime(since, '%Y-%m-%d') + datetime.timedelta(days=7))
> x > datetime.datetime.strptime(input, '%Y-%m-%d')])
})
if (datetime.datetime.strptime(input, '%Y-%m-%d') + datetime.timedelta(days = 14) < datetime.date.now:
li1.append({'weekOf': (datetime.datetime.strptime(input, '%Y-%m-%d') + datetime.timedelta(days=7)).strftime('%Y-%m-%d'),
'count' : len([x for x in li if (datetime.datetime.strptime(since, '%Y-%m-%d') + datetime.timedelta(days=7))
> x > datetime.datetime.strptime(input, '%Y-%m-%d')])
})
...等等
我想出了一个方法来完成这件事。
li1 = []
#calculates how many weeks the for loop should run based on how many weeks there are from the start date
end = math.floor((datetime.datetime.combine(datetime.date.today(), datetime.datetime.min.time()) -
(datetime.datetime.strptime(input, '%Y-%m-%d'))).days/7)
counter = 0
while counter <= end:
start = datetime.datetime.strptime(input, '%Y-%m-%d') + datetime.timedelta(days = 7 * counter)
li1.append({'weekOf': (start.strftime('%Y-%m-%d')),
'count' : len([x for x in li if (start + datetime.timedelta(days= 7))
> x >= (start)])
})
counter += 1
#Creates dataframe from list of dictionaries
df1 = pd.DataFrame(li1, columns = ['weekOf', 'count'])
return df1