2017-10-08 1 views
2

J'ai quelques N/A valeur dans mon dataframePandas: Comment puis-je remplir le n/a avec la moyenne précédente valeur none vide et à côté valeur none vide

df = pd.DataFrame({'A':[1,1,1,3], 
       'B':[1,1,1,3], 
       'C':[1,np.nan,3,5], 
       'D':[2,np.nan, np.nan, 6]}) 
print(df) 

    A B C D 
0 1 1 1.0 2.0 
1 1 1 NaN NaN 
2 1 1 3.0 NaN 
3 3 3 5.0 6.0 

Comment puis-je remplir dans la valeur n/a avec la moyenne de sa valeur non vide précédente et la valeur non vide suivante dans sa colonne? Par exemple, la seconde valeur dans la colonne C doit être rempli avec (1 + 3)/2 = 2

désiré Rendement:

A B C D 
0 1 1 1.0 2.0 
1 1 1 2.0 4.0 
2 1 1 3.0 4.0 
3 3 3 5.0 6.0 

Merci!

Répondre

2

Utilisez ffill et bfill pour remplacer NaN s en remplissant avant et en arrière, puis concat et groupby par index avec un agrégat mean:

df1 = pd.concat([df.ffill(), df.bfill()]).groupby(level=0).mean() 
print (df1) 
    A B C D 
0 1 1 1.0 2.0 
1 1 1 2.0 4.0 
2 1 1 3.0 4.0 
3 3 3 5.0 6.0 

Détail:

print (df.ffill()) 
    A B C D 
0 1 1 1.0 2.0 
1 1 1 1.0 2.0 
2 1 1 3.0 2.0 
3 3 3 5.0 6.0 

print (df.bfill()) 
    A B C D 
0 1 1 1.0 2.0 
1 1 1 3.0 6.0 
2 1 1 3.0 6.0 
3 3 3 5.0 6.0 
+2

Une telle belle logique. +1 – Dark