带groupby的数据帧滚动求和列

2024-09-28 01:32:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个新列,该列在Values列中提供值的滚动和。滚动总和包括4行,即当前行和下三行。我想对“类型”列中的每种类型执行此操作

但是,如果在下一个类型开始之前少于4行,我希望滚动总和仅使用剩余的行。例如,如果当前类型的当前行后有2行,则滚动和总共使用3行。请参见下表,其中显示了我目前获得的以及我的期望

^{tb1}$

下面这行代码是我目前用来获取滚动和的代码

rolling_sum = df.groupby('Type', sort=False)['Value'].rolling(4, min_periods = 3).sum().shift(-3).reset_index()
rolling_sum = rolling_sum.rename(columns={'Value': 'Rolling Sum'})

extracted_col = rolling_sum['Rolling Sum']
df = df.join(extracted_col)

我非常感谢你的帮助


Tags: 代码类型dfvaluecolvaluessumgroupby
1条回答
网友
1楼 · 发布于 2024-09-28 01:32:08

您可以尝试对每个组的反转值运行滚动和,然后使用min_periods值1进行反转:

df['Rolling Sum'] = df.groupby('Type', sort=False)['Value'].apply(lambda x: x[::-1].rolling(4, min_periods=1).sum()[::-1])

结果:

   Index        Type    Value   Rolling Sum
0      1        left        5          22.0
1      2        left        9          34.0
2      3        left        0          25.0
3      4        left        8          25.0
4      5        left       17          17.0
5      6    straight        7          61.0
6      7    straight        4          77.0
7      8    straight        0          86.0
8      9    straight       50          97.0
9     10    straight       23          47.0
10    11    straight       13          24.0
11    12    straight       11          11.0

相关问题 更多 >

    热门问题