Pandas-根据前一行值的总和创建列

问题描述 投票:0回答:2

样本数据集:

   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()

如何计算自定义累加和函数?

pandas
2个回答
3
投票

您确定预期的输出正确吗?

我会做:

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

0
投票

鸭数据库:

(
 df1.sql.select("*,sum(val) over(partition by id rows between 2 preceding and current row) sum")
 .order("index")
)
© www.soinside.com 2019 - 2024. All rights reserved.