我有下一个数据框
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