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

时间:2019-02-28 11:26:25

标签: 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

和df2具有类似的结构:-

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(),但是无法完全实现我想要的功能。在这方面的任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:3)

DataFrame.maskmean一起使用:

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

numpynumpy.where的替代方案在大型DataFrame中应该能更快地工作:

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