【发布时间】:2015-04-09 17:33:23
【问题描述】:
我有一个数据集,其结构是:日期 利润
数据集的一个样本是:
Date Profit
2013-06-21 14
2013-06-22 19
2013-06-23 11
2013-06-24 13
2013-06-25 6
2013-06-26 22
2013-06-27 22
2013-06-28 3
2013-06-29 5
2013-06-30 10
2013-07-01 17
2013-07-02 14
2013-07-03 9
2013-07-04 7
Sample input 是:
data = [('2013-06-21',14),
('2013-06-22',19),
('2013-06-23',11),
('2013-06-24',13),
('2013-06-25',6),
('2013-06-26',22),
('2013-06-27',22),
('2013-06-28',3),
('2013-06-29',5),
('2013-06-30',10),
('2013-07-01',17),
('2013-07-02',14),
('2013-07-03',9),
('2013-07-04',7)]
现在我想做一个rolling aggregation 并存储聚合。通过滚动聚合,我的意思是说第 1 周(2013 年 6 月 21 日至 2013 年 6 月 27 日)我想添加上一个日期的利润并将其与当前日期一起存储。所以对于2013-06-21,总和将是14,因为它是一周的第一天,但对于2013-06-22,它应该是previous date (2013-06-21) 和current date (2013-06-22) 的总和,并且应该与当前日期一起存储。这将持续到周末,然后在下周它将再次重新开始,新的一周没有之前的日期。所以第一周sample output 应该是这样的:
Date Profit
2013-06-21 14
2013-06-22 33 #(14 + 19)
2013-06-23 44 #(33 + 11)
2013-06-24 57 #(44 + 13)
2013-06-25 63 #(57 + 6)
2013-06-26 85 #(63 + 22)
2013-06-27 107 #(85 + 22)
我尝试查看defaultdict 并这样做了:
def aggregate(data, key, value, func):
measures_dict = collections.defaultdict(list)
for k,v in zip(data[key], data[value]):
measures_dict[k].append(v)
return [(k,func(measures_dict[k])) for k in measures_dict.keys()]
但我没有得到结果,并认为defaultdict 不是正确的方法。我还查看了pandas,但我无法找到开始执行此操作的方法。谁能帮我做这个滚动聚合?
【问题讨论】:
-
您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出和您实际获得的输出(控制台输出、堆栈跟踪、编译器错误 - 不管是什么适用的)。您提供的详细信息越多,您可能收到的答案就越多。
-
另外,一周的定义是什么?是星期一还是星期天是一周的开始?
-
这个数据是什么格式的?排序了吗?日期是否已经解析为对象,还是只是字符串?
-
@MartijnPieters 我是 python 新手,所以我无法继续使用任何方法。一周的开始不是由星期一或任何其他日期定义的。它实际上定义了一个开始日期。日期也是简单的字符串
-
@MartijnPieters 我确实试图查看
defaultdict的详细信息,但无法了解如何在我的案例中使用它
标签: python pandas aggregation itertools