样本数据集:
id val
0 9 1
1 9 0
2 9 4
3 9 6
4 9 2
5 9 3
6 5 0
7 5 1
8 5 6
9 5 2
10 5 4
从数据集中,我想生成一列
sum
。对于前 3 行:sum
=sum
+val
(按 id 分组)。从第 4 行开始,每行包含 val
列(按 id 分组)的前 3 行的累积和。循环遍历每一行。当新的id出现时,应该从头开始计算。
所需输出:
id val sum
0 9 1 1
1 9 0 1
2 9 4 5
3 9 6 10
4 9 2 12
5 9 3 11
6 5 0 0
7 5 1 1
8 5 6 7
9 5 2 9
10 5 4 12
我尝试过的代码:
df['sum']=df['val'].rolling(min_periods=1, window=3).groupby(df['id']).cumsum()
如何计算自定义累加和函数?
您确定预期的输出正确吗?
我会做:
df['sum'] = df.groupby('id')['val'].rolling(min_periods=1, window=3).sum().values
输出:
id val sum
0 5 1 1.0
1 5 0 1.0
2 5 4 5.0
3 5 6 10.0
4 5 2 12.0
5 5 3 11.0
6 9 0 0.0
7 9 1 1.0
8 9 6 7.0
9 9 2 9.0
10 9 4 12.0
鸭数据库:
(
df1.sql.select("*,sum(val) over(partition by id rows between 2 preceding and current row) sum")
.order("index")
)