Python 将一个数据帧中的零值列替换为另一个数据帧中同名列的平均值

Python 将一个数据帧中的零值列替换为另一个数据帧中同名列的平均值,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,df1和df2,每个数据帧的列数和列名相同,但行数不同。基本上,df2中有许多列都具有0值 我想要完成的是,df2中所有的零值列都被替换为相同列名的平均值(如df1中的一样) 因此,如果df1具有如下结构:- Column1 Column2 ------ Column n 0.4 2.3 1.7 0.7 2.5 1.4 0.1 2.1 1.2 Column1

我有两个数据帧,df1和df2,每个数据帧的列数和列名相同,但行数不同。基本上,df2中有许多列都具有0值

我想要完成的是,df2中所有的零值列都被替换为相同列名的平均值(如df1中的一样)

因此,如果df1具有如下结构:-

Column1 Column2 ------    Column n
0.4      2.3               1.7
0.7      2.5               1.4
0.1      2.1               1.2
Column1 Column2 ------    Column n
0      2.3                1.7
0      2.5               1.4
0      2.1               1.2
df2的结构如下:-

Column1 Column2 ------    Column n
0.4      2.3               1.7
0.7      2.5               1.4
0.1      2.1               1.2
Column1 Column2 ------    Column n
0      2.3                1.7
0      2.5               1.4
0      2.1               1.2
我想用df1中映射的同一列的平均值替换column1(以及df2中的任何其他全零列)。 最后,df2看起来像:-

Column1 Column2 ------    Column n
0.4      2.3               1.7
0.4      2.5               1.4
0.4      2.1               1.2
(df2第1列中的所有零值替换为df1第1列的平均值

我对这一点相当陌生,并且已经检查了其他选项,如fillna()和replace(),但无法完全实现我想要的。非常感谢您在这方面提供的任何帮助。

一起使用表示

df = df2.mask(df2 == 0, df1.mean(), axis=1)
print (df)
   Column1  Column2  Column n
0      0.4      2.3       1.7
1      0.4      2.5       1.4
2      0.4      2.1       1.2
numpy
在大数据帧中工作速度更快的替代方案:

df = pd.DataFrame(np.where(df2 == 0, df1.mean(), df1), 
                  index=df1.index,
                  columns=df1.columns)
print (df)
   Column1  Column2  Column n
0      0.4      2.3       1.7
1      0.4      2.5       1.4
2      0.4      2.1       1.2

回答得很好。一行,正是我想要的!谢谢:-)