我有下一个数据框

     A    B    C    D   E   F
0  158  158  158  177   1  10
1  158  158  158  177   2  20
2  177  177  177  177   3  30
3    1    3    5    7 NaN  10
4  177  177  177  177   6  50


现在,我尝试获取一个新的数据帧,其中E3 = AVG [AVG(E)= 3,AVG(3)= 5] = 4

     A    B    C    D   E   F
0  158  158  158  177   1  10
1  158  158  158  177   2  20
2  177  177  177  177   3  30
3    1    3    5    7  [4] 10
4  177  177  177  177   6  50

最佳答案

如果您可以在内存中保留三个数据帧,我找不到单线


一列平均
另一个具有列平均值
以上两个的平均值的第三


然后fillna将根据第三个数据帧中的确切位置替换NaN值。

import pandas as pd
import numpy as np
data = [[158,158,158,177,1,10]
       ,[158,158,158,177,2,20]
       ,[177,177,177,177,3,30]
       ,[1,3,5,7,np.NaN,10]
       ,[177,177,177,177,6,50]]
df = pd.DataFrame(data=data)
# row and column means replicated over columns and rows
mean0 = (pd.concat([df.mean(axis=0)]*df.shape[0], axis=1, ignore_index=True)).transpose()
mean1 = pd.concat([df.mean(axis=1)]*df.shape[1], axis=1, ignore_index=True)
# average of mean0 and mean1
m = mean0.add(mean1)/2
df = df.fillna(m)
df
    0       1       2       3       4       5
0   158     158     158     177     1.0     10
1   158     158     158     177     2.0     20
2   177     177     177     177     3.0     30
3   1       3       5       7       4.1     10
4   177     177     177     177     6.0     50

10-08 12:43