簡體   English   中英

按期間分組的滾動總和

[英]Rolling sum of groups by period

我有這個 dataframe:

lst=[['01012021','A',10],['01012021','B',20],['02012021','A',12],['02012021','B',23]]
df2=pd.DataFrame(lst,columns=['Date','FN','AuM'])

我想按日期和 FN 獲得滾動總和。 期望的結果如下所示:

lst=[['01012021','A',10,''],['01012021','B',20,''],['02012021','A',12,22],['02012021','B',23,33]]
df2=pd.DataFrame(lst,columns=['Date','FN','AuM','Roll2PeriodSum'])

你能幫幫我嗎?

謝謝

解決方案如果連續的日期時間,不使用列date來計算每組:

df2['Roll2PeriodSum'] = (df2.groupby('FN').AuM
                            .rolling(2)
                            .sum() 
                            .reset_index(level=0, drop=True))
print (df2)
       Date FN  AuM  Roll2PeriodSum
0  01012021  A   10             NaN
1  01012021  B   20             NaN
2  02012021  A   12            22.0
3  02012021  B   23            43.0

使用日期時間的解決方案,使用列date進行計數:

df2['Date'] = pd.to_datetime(df2['Date'], format='%d%m%Y')

df = (df2.join(df2.set_index('Date')
                  .groupby('FN').AuM
                  .rolling('2D')
                  .sum().rename('Roll2PeriodSum'), on=['FN','Date']))
print (df)
        Date FN  AuM  Roll2PeriodSum
0 2021-01-01  A   10            10.0
1 2021-01-01  B   20            20.0
2 2021-01-02  A   12            22.0
3 2021-01-02  B   23            43.0

df = (df2.join(df2.set_index('Date')
                  .groupby('FN').AuM
                  .rolling('2D', min_periods=2)
                  .sum()
                  .rename('Roll2PeriodSum'), on=['FN','Date']))
print (df)
        Date FN  AuM  Roll2PeriodSum
0 2021-01-01  A   10             NaN
1 2021-01-01  B   20             NaN
2 2021-01-02  A   12            22.0
3 2021-01-02  B   23            43.0

使用groupby.rolling.sum

df2['Roll2PeriodSum'] = (
    df2.assign(Date=pd.to_datetime(df2['Date'], format='%d%m%Y'))
       .groupby('FN').rolling(2)['AuM'].sum().droplevel(0)
)
print(df2)

# Output
       Date FN  AuM  Roll2PeriodSum
0  01012021  A   10             NaN
1  01012021  B   20             NaN
2  02012021  A   12            22.0
3  02012021  B   23            43.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM