基于在tim上的平均值对面板数据帧中的项进行分类

2024-09-27 04:19:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个面板数据的多索引数据框,它显示了一段时间内的历史价格。我基本上想做的是根据他们一段时间内的平均预测对他们进行分组——高(高于0.4)、中(介于0.2和0.4之间)和低(低于0.2)

                      price   yield   forecast  

 date       assetid                             
 1/1/2017   4200      96.44    0.23       0.64  
 1/1/2017   408        46.3     0.6        0.4  
 1/1/2017   413       50.68    0.47       0.73  
 1/1/2017   3911      82.48    0.33       0.84  
 1/1/2017   7392      97.24     0.4       0.62  
 1/1/2017   7144      31.86    0.18       0.54  
 1/1/2017   8793      59.66    0.65        0.9  
 1/2/2017   4200       57.1    0.21       0.69  
 1/2/2017   408        4.76    0.86       0.16  
 1/2/2017   413       70.79    0.24       0.12  
 1/2/2017   3911       5.43    0.91       0.44  
 1/2/2017   7392      47.33    0.51       0.18  
 1/2/2017   7144      17.85    0.79       0.59  
 1/2/2017   8793      98.08     0.2       0.24  

因此,我需要弄清楚的第一步是如何创建一个返回每个资产平均值的表

  assetid   Average of forecast  
     408               0.73  
     413              0.355  
    3911               0.62  
    4200               0.22  
    7144              0.485  
    7392              0.455  
    8793              0.425  

然后,我必须加入这个新创建的表并在assetid上进行匹配,随着时间的推移使用相同的分类

                      price   yield   forecast   type  
 date       assetid                                    
 1/1/2017   4200      96.44    0.23       0.64   med   
 1/1/2017   408        46.3     0.6        0.4   high  
 1/1/2017   413       50.68    0.47       0.73   med   
 1/1/2017   3911      82.48    0.33       0.84   med   
 1/1/2017   7392      97.24     0.4       0.62   high  
 1/1/2017   7144      31.86    0.18       0.54   low   
 1/1/2017   8793      59.66    0.65        0.9   high  
 1/2/2017   4200       57.1    0.21       0.69   med   
 1/2/2017   408        4.76    0.86       0.16   high  
 1/2/2017   413       70.79    0.24       0.12   med   
 1/2/2017   3911       5.43    0.91       0.44   med   
 1/2/2017   7392      47.33    0.51       0.18   high  
 1/2/2017   7144      17.85    0.79       0.59   low   
 1/2/2017   8793      98.08     0.2       0.24   high  

Tags: 数据面板date价格med历史资产price
2条回答

让我们使用pd.cut

s = pd.cut(df.groupby('assetid')['forecast'].mean(),[0,.2,.4,np.inf], labels=['low','med','high'])
df['type'] = df.assetid.map(s)
print(df)

输出:

        date  assetid  price  yield  forecast  type
0   1/1/2017     4200  96.44   0.23      0.64  high
1   1/1/2017      408  46.30   0.60      0.40   med
2   1/1/2017      413  50.68   0.47      0.73  high
3   1/1/2017     3911  82.48   0.33      0.84  high
4   1/1/2017     7392  97.24   0.40      0.62   med
5   1/1/2017     7144  31.86   0.18      0.54  high
6   1/1/2017     8793  59.66   0.65      0.90  high
7   1/2/2017     4200  57.10   0.21      0.69  high
8   1/2/2017      408   4.76   0.86      0.16   med
9   1/2/2017      413  70.79   0.24      0.12  high
10  1/2/2017     3911   5.43   0.91      0.44  high
11  1/2/2017     7392  47.33   0.51      0.18   med
12  1/2/2017     7144  17.85   0.79      0.59  high
13  1/2/2017     8793  98.08   0.20      0.24  high

pd.cut+transform

df['type']=pd.cut(df.groupby(level='assetid')
               .forecast
                  .transform('mean'),[0,0.2,0.4,np.inf],labels=['low','med','high'])
df
Out[663]: 
                  price  yield  forecast  type
date     assetid                              
1/1/2017 4200     96.44   0.23      0.64  high
         408      46.30   0.60      0.40   med
         413      50.68   0.47      0.73  high
         3911     82.48   0.33      0.84  high
         7392     97.24   0.40      0.62   med
         7144     31.86   0.18      0.54  high
         8793     59.66   0.65      0.90  high
1/2/2017 4200     57.10   0.21      0.69  high
         408       4.76   0.86      0.16   med
         413      70.79   0.24      0.12  high
         3911      5.43   0.91      0.44  high
         7392     47.33   0.51      0.18   med
         7144     17.85   0.79      0.59  high
         8793     98.08   0.20      0.24  high

相关问题 更多 >

    热门问题