我如何将NaNs作为手段()而不是多指数

时间:2017-05-02 22:27:11

标签: python python-2.7 pandas

我有一个如下所示的数据结构:

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是不同的地区。我如何将NANs作为列的意思,但只针对相应的状态,而不是所有列的方法?

在这一个上完全是stymid,任何帮助表示赞赏。

输出应该如下所示:

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

谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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