Python 将一个数据帧中的零值列替换为另一个数据帧中同名列的平均值
我有两个数据帧,df1和df2,每个数据帧的列数和列名相同,但行数不同。基本上,df2中有许多列都具有0值 我想要完成的是,df2中所有的零值列都被替换为相同列名的平均值(如df1中的一样) 因此,如果df1具有如下结构:-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
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
回答得很好。一行,正是我想要的!谢谢:-)