2017-11-14 11 views
3

私は時間の経過とともに過去の価格を示すパネルデータのマルチインデックスデータフレームを持っています。私が基本的にやってみたいのは、時間平均(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 

答えて

3

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 
+0

@AndyHaydenだ – Wen

+0

:-)それを改善維持されますよかった!ありがとうございました –

+0

@DickThompson YW〜:-)素敵な一日を – Wen

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 
関連する問題