1

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

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

指数 类型 价值 当前滚动总和 预期滚动总和
1 剩下 5 22 22
2 剩下 9 34 34
3 剩下 0 25
4 剩下 8 25
5 剩下 17 17
6 直的 7 61 61
7 直的 4 77 77
8 直的 0 86 86
9 直的 50 97 97
10 直的 23 47
11 直的 13 24
12 直的 11 11

以下代码行是我目前用来获取滚动总和的代码。

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)

我将衷心感谢您的帮助。

4

1 回答 1

2

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

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
于 2021-07-13T07:08:58.170 回答