2017-05-02 1 views
2

で、私はこのようになりますデータ構造持っています:どのように私は(手段としてNaNを転嫁)が、マルチインデックス

S1 D1 1 2 3 4 5 
    D2 2 Nan 3 4 5 
    D3 3 4 5 Nan 6 
S2 D4 Nan 3 4 5 6 
    D5 6 7 8 9 0 
S3 D6 3 4 5 6 7 
    D7 4 5 6 7 Nan 
    D8 5 6 7 7 8 
    D9 2 3 4 5 6 

Sさんは、さまざまな国、およびD'sの異なる地区です。どのようにしてNANをコラムとして意味するのでしょうか?それだけではなく、対応するステートでは、すべてのコラムの手段ではありませんか?

これに全面的にストイミッドが表示されます。

出力は次のようになりますないこの平均値を全体の列

S1 D1 1 2 3 4 5 
    D2 2 3 3 4 5 
    D3 3 4 5 4 6 
S2 D4 6 3 4 5 6 
    D5 6 7 8 9 0 
S3 D6 3 4 5 6 7 
    D7 4 5 6 7 7 
    D8 5 6 7 7 8 
    D9 2 3 4 5 6 

を:

S1 D1 1 2 3 4 5 
    D2 2 4.25 3 4 5 
    D3 3 4 5 5.87 6 
S2 D4 3.25 3 4 5 6 
    D5 6 7 8 9 0 
S3 D6 3 4 5 6 7 
    D7 4 5 6 7 4.25 
    D8 5 6 7 7 8 
    D9 2 3 4 5 6 

はありがとうございます。

答えて

3

使用transform

df.fillna(df.groupby(level=0).transform('mean')) 

     2 3 4 5 6 
0 1       
S1 D1 1.0 2.0 3 4.0 5.0 
    D2 2.0 3.0 3 4.0 5.0 
    D3 3.0 4.0 5 4.0 6.0 
S2 D4 6.0 3.0 4 5.0 6.0 
    D5 6.0 7.0 8 9.0 0.0 
S3 D6 3.0 4.0 5 6.0 7.0 
    D7 4.0 5.0 6 7.0 7.0 
    D8 5.0 6.0 7 7.0 8.0 
    D9 2.0 3.0 4 5.0 6.0 
+0

かなり単に、あなたが揺れます。ありがとう、初めて完全に働いた。 –

+0

これは簡単な補間/外挿を実装するのに役立ちました:df.fillna(df.groupby(level = 0).transform(lambda x:x.interpolate(method = 'linear')bfill().ffill()) – MyopicVisage

4
In [354]: df.fillna(df.mean(level=0)) 
Out[354]: 
     2 3 4 5 6 
0 1 
S1 D1 1.0 2.0 3 4.0 5.0 
    D2 2.0 3.0 3 4.0 5.0 
    D3 3.0 4.0 5 4.0 6.0 
S2 D4 6.0 3.0 4 5.0 6.0 
    D5 6.0 7.0 8 9.0 0.0 
S3 D6 3.0 4.0 5 6.0 7.0 
    D7 4.0 5.0 6 7.0 7.0 
    D8 5.0 6.0 7 7.0 8.0 
    D9 2.0 3.0 4 5.0 6.0 
+0

ありがとうマックスは、以下のような夢のように動作します。 –

関連する問題