繁体   English   中英

带有groupby的熊猫数据框滚动总和列

[英]Pandas dataframe rolling sum column with groupby

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

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

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

我将衷心感谢您的帮助。

您可以尝试对每个组的反向值运行滚动总和,然后使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM