Pandas - Remplissez nans jusqu'à la première valeur non NULL


9

J'ai une trame de données comme

A    B    C
1    nan  nan
2    nan  5
3    3    nan
4    nan  nan

Comment remplir uniquement les valeurs NULL (avec 0) pour chaque série jusqu'à la première valeur non NULL, conduisant à

A    B    C
1    0    0
2    0    5
3    3    nan
4    nan  nan

Réponses:


6

Un peu d'astuce en utilisant pandas.DataFrame.ffillavec notnaet where:

df.where(df.ffill().notna(), 0)

Ou en utilisant pandas.DataFrame.interpolate:

df.interpolate('zero', fill_value=0, limit_direction='backward')

Production:

   A    B    C
0  1  0.0  0.0
1  2  0.0  5.0
2  3  3.0  NaN
3  4  NaN  NaN

6

Cela se ferait en utilisant whereou mask.

df.mask(df.notna().cumsum().eq(0), 0)
# or,
df.where(df.notna().cumsum().ne(0), 0)

   A    B    C
0  1  0.0  0.0
1  2  0.0  5.0
2  3  3.0  NaN
3  4  NaN  NaN

De nombreuses façons d'écorcher un chat ici :-)


0

Puisque 0 + nan est nan, cela fonctionne:

xf = df.fillna(0) + df.bfill()*0
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.