当行值为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 )
答案 0 :(得分:2)
将groupby
与apply
一起使用,当行中只有0.1时。
sample=sample.groupby('val').apply(lambda x : x.fillna(x.mean())).reset_index(level=0,drop=True).sort_index()
最好也不要使用lambda
,transform
整个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