我有一个如下所示的数据结构:
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
谢谢。
答案 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