我有两个数据帧DF1
和DF2
,我想将DF1
中一列的值聚合到DF2
中一列的日期范围下。以下是我的可复制示例:
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
上方。也就是说,从6/16/2013
到6/22/2013
(两者都包括在内)的DF1.a
和DF1.b
的值应该聚合在最近的下一个日期分隔符处,即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解决方案呢?谢谢您!你知道吗
首先需要将日期字符串转换为实际日期。然后可以使用lambda来计算每行的\u和b\u和。最后将df和DF2相加:
相关问题 更多 >
编程相关推荐