gpt4 book ai didi

python - Pandas :创建列,其中包含同一 ID/组内另一列的前 n 行的滚动总和

转载 作者:行者123 更新时间:2023-12-05 04:46:40 24 4
gpt4 key购买 nike

示例数据集:

    id  fruit
0 7 NaN
1 7 apple
2 7 NaN
3 7 mango
4 7 apple
5 7 potato
6 3 berry
7 3 olive
8 3 olive
9 3 grape
10 3 NaN
11 3 mango
12 3 potato

fruit 列中,NaNpotato 的值为 0。所有其他字符串的值为 1。我想生成一个新列 sum_last_3 其中每一行计算 fruit 列的前 3 行(含)的总和。当出现新的id时,应该从头开始计算。

我想要的输出:

   id   fruit sum_last3
0 7 NaN 0
1 7 apple 1
2 7 NaN 1
3 7 mango 2
4 7 apple 2
5 7 potato 2
6 3 berry 1
7 3 olive 2
8 3 olive 3
9 3 grape 3
10 3 NaN 2
11 3 mango 2
12 3 potato 1

我的代码:

df['sum_last5'] = (df['fruit'].ne('potato') & df['fruit'].notna())
.groupby('id',sort=False, as_index=False)['fruit']
.rolling(min_periods=1, window=3).sum().astype(int).values

最佳答案

您可以稍微修改您的代码,如下所示:

df['sum_last3'] = ((df['fruit'].ne('potato') & df['fruit'].notna())
.groupby(df['id'],sort=False)
.rolling(min_periods=1, window=3).sum().astype(int)
.droplevel(0)
)

或在您的代码中使用 .values:

df['sum_last3'] = ((df['fruit'].ne('potato') & df['fruit'].notna())
.groupby(df['id'],sort=False)
.rolling(min_periods=1, window=3).sum().astype(int)
.values
)

您的代码很接近,只需要在 .groupby() 调用中将 id 更改为 df['id'] (因为调用 .groupby() 的主体现在是 bool 系列而不是 df 本身,因此 .groupby() 无法识别 id 列仅由列标签“id”组成,还需要数据框名称来完全限定/标识该列)。

同时删除 as_index=False,因为此参数用于数据框而不是此处的( bool )系列。

结果:

print(df)

id fruit sum_last3
0 7 NaN 0
1 7 apple 1
2 7 NaN 1
3 7 mango 2
4 7 apple 2
5 7 potato 2
6 3 berry 1
7 3 olive 2
8 3 olive 3
9 3 grape 3
10 3 NaN 2
11 3 mango 2
12 3 potato 1

关于python - Pandas :创建列,其中包含同一 ID/组内另一列的前 n 行的滚动总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68755233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com