Itertools groupby通过itertools._grouper对象的动态迭代

时间:2014-09-27 13:31:50

标签: python iterator itertools

请考虑此数据,其中包括[日期,销售额,销售数量]:

data=[[datetime.datetime(2012,1,1,2,0,0), 14, 3],
[datetime.datetime(2012,1,1,3,0,0), 15, 5],
[datetime.datetime(2012,1,1,5,0,0), 11, 4],
[datetime.datetime(2012,1,2,1,0,0), 18, 7],
[datetime.datetime(2012,1,2,5,0,0), 14, 1],]

我正在做的是按日期对数据进行分组,并根据数据执行加权平均。 加权平均函数采用嵌套数组并吐出一个值:

def weighted_average(nested_array):
    # data format[[14,3], [15,5], [11,4]]
    # performs weighted average
    return weighted_average

数据分组按以下方式进行。

grouped_sales = itertools.groupby(data, date_key)

我按如下方式计算汇总值:

aggregate_sales = (
(day, weighted_average([day_sales,sales] for date, day_sales, sales in week_sales))
for day, week_sales in grouped_sales)

请注意,在上面的情况下,我知道week_sales(itertools._grouper)对象包含3个值(date,date_sales,sales),我很容易迭代它们。 如果我不知道itertool._grouper对象包含多少值来迭代,该怎么办? 让我解释..

问题从这里开始。有时我有多个项目的销售数据,如[日期,项目1的销售额,项目1的销售数量,项目2的销售额,项目2的销售数量,......]:

data=[(datetime.datetime(2012,1,1,2,0,0), 14, 3, 55, 2],
[datetime.datetime(2012,1,1,3,0,0), 15, 5, 68, 3],
[datetime.datetime(2012,1,1,5,0,0), 11, 4, 42, 1],
[datetime.datetime(2012,1,2,1,0,0), 18, 7, 22, 2],
[datetime.datetime(2012,1,2,5,0,0), 14, 1, 97, 5],]

因此数据数组中嵌套数组的长度是可变的。

如何遍历itertools._grouper对象(week_sales),该对象现在包含5个值(在我的情况下可能是变量)并且成对地对每个项目进行加权平均?

0 个答案:

没有答案