【发布时间】:2018-03-16 03:35:54
【问题描述】:
我有两个 DataFrames DF1 和 DF2,我想在 DF2 中一列的日期范围下聚合 DF1 中一列的值。这是我的可重现示例:
DF1 范围从6/14/2013 到7/13/2013,按时间降序排列。其要聚合的列是a 和b。注意,同一个date可以有多个记录。
list1 = [{'a': 5, 'date': '7/13/2013', 'b': 13},
{'a': 4, 'date': '7/12/2013', 'b': 14},
{'a': 7, 'date': '7/12/2013', 'b': 12},
{'a': 2, 'date': '7/10/2013', 'b': 18},
{'a': 9, 'date': '7/7/2013', 'b': 17},
{'a': 6, 'date': '7/5/2013', 'b': 20},
{'a': 8, 'date': '6/30/2013', 'b': 12},
{'a': 5, 'date': '6/29/2013', 'b': 13},
{'a': 3, 'date': '6/25/2013', 'b': 13},
{'a': 4, 'date': '6/23/2013', 'b': 10},
{'a': 1, 'date': '6/22/2013', 'b': 16},
{'a': 6, 'date': '6/20/2013', 'b': 19},
{'a': 7, 'date': '6/18/2013', 'b': 12},
{'a': 9, 'date': '6/16/2013', 'b': 15}]
DF1 = pd.DataFrame(list1)
DF2 包含每周日期分隔符,DF1 列 a 和 b 应聚合。
list2 = [{'datesep': '6/22/2013', 'c': 32},
{'datesep': '6/29/2013', 'c': 23},
{'datesep': '7/6/2013', 'c': 44},
{'datesep': '7/13/2013', 'c': 18},
{'datesep': '7/20/2013', 'c': 51}]
DF2 = pd.DataFrame(list2)
我想要做的是保持DF1.c 原样,并聚合DF1.a 和DF1.b,以便在DF2.datesep 分隔符上对这些值求和,就在它们的DF1.date 上方。也就是说,DF1.a 和DF1.b 的值从6/16/2013 到6/22/2013(包括两者)应该在最近的下一个日期分隔符处聚合,即DF2.datesep=6/22/2013 行。 7/7/2013 到 7/13/2013(包括两者)应在最近的下一个日期分隔符处聚合,即 DF2.datesep=7/13/2013 行等。因此结果应如下所示(列顺序无关紧要):
c date a_sum b_sum
0 32 6/22/2013 23 62
1 23 6/29/2013 12 36
2 44 7/6/2013 14 32
3 18 7/13/2013 27 74
4 51 7/20/2013 - -
我在list1 和list2 上循环执行此操作,但是是否有使用DF1 和DF2 的Pandas/Numpy 解决方案?谢谢!
【问题讨论】:
标签: python pandas numpy dataframe