簡體   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