我有一个数据框,该数据框总结了一天中每天的每一天我花费的预算(两列Hour of day
和Cost
)。
我必须将一天中的连续几个小时分为6组,例如:0到3,然后是4到10、11到15、16到18、19到21、22到23,也可以称为一个元组:(4,11,16,19,22)。
然后,对于每个切片,我都想做一些基本操作。最终目标是提取在所有时间范围内获得最低Cost
方差总和的组合。 (换句话说,哪种组合能够最好地将一天中相似的时间分组在一起)。
我尝试了一天,使用itertools.combinations遍历5到1至23之间的5个长度的元组的所有可能组合。但是主要的问题是,当我尝试对每个切片执行一些基本操作时。提取单个时间范围(例如0到3)已经花费了35秒。
将day
作为2列(Hour of day
和Cost
)和24行的数据框,到目前为止,这是我用于切片的部分:
import itertools
for item in itertools.combinations(range(1,24), 5):
day_slice_1 = day.loc[(day['Hour of day'] < item[0])].copy()
day_slice_2 = day.loc[(day['Hour of day'] >= item[0]) & (day['Hour of day'] < item[1])].copy()
day_slice_3 = day.loc[(day['Hour of day'] >= item[1]) & (day['Hour of day'] < item[2])].copy()
day_slice_4 = day.loc[(day['Hour of day'] >= item[2]) & (day['Hour of day'] < item[3])].copy()
day_slice_5 = day.loc[(day['Hour of day'] >= item[3]) & (day['Hour of day'] < item[4])].copy()
day_slice_6 = day.loc[(day['Hour of day'] >= item[4])].copy()
重复33649次后,此过滤将花费大量时间。您能想到任何更快的方法吗?