【发布时间】:2020-03-24 14:40:47
【问题描述】:
我有以下数据框:
x = pd.DataFrame({'user': ['a','a','a','a','b','b'], 'dt': ['2016-01-01','2016-01-02','2016-01-02','2016-01-03', '2016-01-05','2016-01-06'], 'val': [1,33,45,3,2,1]})
user dt val
0 a 2016-01-01 1
1 a 2016-01-02 33
2 a 2016-01-02 45
3 a 2016-01-03 3
4 b 2016-01-05 2
5 b 2016-01-06 1
我想要一个额外的列来显示过去 2 天中每个用户分组的聚合值(在原始数据集的每一行上)。所以我想要的输出如下所示:
user dt val sum
0 a 2016-01-01 1 1
1 a 2016-01-02 33 79
2 a 2016-01-02 45 79
3 a 2016-01-03 3 81
4 b 2016-01-05 2 2
5 b 2016-01-06 1 3
我尝试了以下方法,但没有成功。
x['sum'] = x.groupby(['user']).rolling('2d', on='dt')['val'].transform('sum')
即使不使用转换,它也会给我一个错误提示:
Exception: cannot handle a non-unique multi-index!
最好的方法是什么?
【问题讨论】:
-
按照你的逻辑,用户 a 的所有行都应该被求和,因为天差只有 1
-
这只是一个示例。您可以考虑每个组有两个以上的日期。
-
在您的新示例中,对于 01-03 的“用户 a”,最后两天应该是 33 + 45 + 3 = 81,不是吗?怎么是48?
-
@dgg32 你说得对,对不起。解决了这个问题。
标签: python pandas pandas-groupby