【问题标题】:Computing historical average for panel data计算面板数据的历史平均值
【发布时间】:2019-10-21 17:12:55
【问题描述】:

假设您有以下数据框: 现在,我们要计算的是行业平均历史 ROE,并将这个数字放在一个新列中。

Date        ROE   id 
30-06-2013  2%    1
30-06-2013  1%    2        
30-09-2013  5%    1
30-09-2013  6%    2
30-09-2013  4%    3        
31-12-2013  10%   1
31-12-2013  5%    2
31-12-2013  3%    3    
31-03-2014  11%   1
31-03-2014  6%    2
31-03-2014  4%    3

在计算历史 ROE 时,我们希望至少依赖 4 个不同的日期。 生成的数据框应如下所示:

Date        ROE   id Hist. avg. ROE 
30-06-2013  2%    1  NaN
30-06-2013  1%    2  NaN      
30-09-2013  5%    1  NaN
30-09-2013  6%    2  NaN
30-09-2013  4%    3  NaN      
31-12-2013  10%   1  NaN
31-12-2013  5%    2  NaN
31-12-2013  3%    3  NaN
31-03-2014  11%   1  5.2%
31-03-2014  6%    2  5.2%
31-03-2014  4%    3  5.2%

【问题讨论】:

标签: python pandas dataframe time-series


【解决方案1】:

IIUC,你要rolling().mean()

df['hist'] = (df.groupby('id', as_index=False)
                .ROE.rolling(4).mean()
                .reset_index(level=0, drop=True)
             )

输出:

          Date   ROE  id   hist
0   30-06-2013  0.02   1    NaN
1   30-06-2013  0.01   2    NaN
2   30-09-2013  0.05   1    NaN
3   30-09-2013  0.06   2    NaN
4   30-09-2013  0.04   3    NaN
5   31-12-2013  0.10   1    NaN
6   31-12-2013  0.05   2    NaN
7   31-12-2013  0.03   3    NaN
8   31-03-2014  0.11   1  0.070
9   31-03-2014  0.06   2  0.045
10  31-03-2014  0.04   3    NaN

更新:根据评论,您可能希望在 date 上汇总,然后在结果上汇总 rolling

df['Date'] = pd.to_datetime(df['Date'])

new_df = (df.groupby('Date').ROE.agg(['sum','count'])
            .rolling(4).sum()
            .assign(hist=lambda x: x['sum']/x['count'])
         )

df['hist'] = df['Date'].map(new_df['hist'])

输出:

         Date   ROE  id      hist
0  2013-06-30  0.02   1       NaN
1  2013-06-30  0.01   2       NaN
2  2013-09-30  0.05   1       NaN
3  2013-09-30  0.06   2       NaN
4  2013-09-30  0.04   3       NaN
5  2013-12-31  0.10   1       NaN
6  2013-12-31  0.05   2       NaN
7  2013-12-31  0.03   3       NaN
8  2014-03-31  0.11   1  0.051818
9  2014-03-31  0.06   2  0.051818
10 2014-03-31  0.04   3  0.051818

【讨论】:

    猜你喜欢
    • 2021-04-30
    • 2017-03-20
    • 2021-08-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    相关资源
    最近更新 更多