【发布时间】:2021-09-22 05:34:16
【问题描述】:
我正在尝试创建一个新列,该列提供Values 列中值的滚动总和。滚动总和包括 4 行,即当前行和接下来的三行。我想为“类型”列中的每种类型执行此操作。
但是,如果在下一个类型开始之前少于 4 行,我希望滚动总和仅使用剩余的行。例如,如果当前类型的当前行之后有 2 行,则总共 3 行用于滚动和。请参阅下表,其中显示了我目前得到的结果和我的期望。
| Index | Type | Value | Current Rolling Sum | Expected Rolling Sum |
|---|---|---|---|---|
| 1 | left | 5 | 22 | 22 |
| 2 | left | 9 | 34 | 34 |
| 3 | left | 0 | NaN | 25 |
| 4 | left | 8 | NaN | 25 |
| 5 | left | 17 | NaN | 17 |
| 6 | straight | 7 | 61 | 61 |
| 7 | straight | 4 | 77 | 77 |
| 8 | straight | 0 | 86 | 86 |
| 9 | straight | 50 | 97 | 97 |
| 10 | straight | 23 | NaN | 47 |
| 11 | straight | 13 | NaN | 24 |
| 12 | straight | 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)
非常感谢您的帮助。
【问题讨论】:
标签: python pandas dataframe data-science rolling-sum