如何在行中给定条件下填充列的平均值

时间:2019-03-29 14:11:43

标签: python pandas

当行值为0,行值分别为1时,如何用列的平均值填充丢失的数据。 我尝试过的

sample = sample.fillna(sample.loc[sample['val'] == 1].mean())

我想做的是分别计算val为1和val 2时的NaN。

sample = Fillna(sample.mean() If row is 1) & Fillna(sample.mean() If row is 0 )

Preview DataSet

2 个答案:

答案 0 :(得分:2)

groupbyapply一起使用,当行中只有0.1时。

sample=sample.groupby('val').apply(lambda x : x.fillna(x.mean())).reset_index(level=0,drop=True).sort_index()

最好也不要使用lambdatransform整个df和fillna与datadframe

sample=sample.fillna(sample.groupby('val').transform('mean'))

答案 1 :(得分:2)

我们可以groupby val列,然后fillna个缺失的值,其中包含mean个值。在此处使用transform来保持行顺序:

df = pd.DataFrame({'par1': [32,43,54,23],
                   'par2': [24,43,np.nan,64],
                   'par3': [84,np.nan,73,98],
                   'val': [0,1,0,1]})

x = df.groupby('val').transform(lambda x: x.fillna(x.mean())).join(df['val'])

print(x)

输出:

   par1  par2  par3  val
0    32  24.0  84.0    0
1    43  43.0  98.0    1
2    54  24.0  73.0    0
3    23  64.0  98.0    1