J'ai un DataFrame de la forme
eqt_code ACA_FP AC_FP AI_FP BDATE 2015-01-31 5 0.2 NaN 2015-02-28 10 1 3 2015-03-31 NaN NaN 3 2015-04-30 10 1 3
Et j'aimerais, pour chaque mois, obtenir la dernière valeur non-NaN de chaque colonne (NaN s'il n'y a pas de valeur valide) . Résultat: quelque chose comme
eqt_code ACA_FP AC_FP AI_FP BDATE 2015-01-01 NaN NaN NaN 2015-01-02 NaN NaN NaN 2015-01-05 1 NaN NaN 2015-01-06 NaN NaN NaN 2015-01-07 NaN NaN NaN 2015-01-08 NaN 0.2 NaN 2015-01-09 NaN NaN NaN 2015-01-12 5 NaN NaN 2015-01-13 NaN NaN NaN 2015-01-14 NaN NaN NaN 2015-01-15 NaN NaN NaN
J'ai eu deux idées pour effectuer ceci:
Faites un ffill
avec une limite qui va à la fin du mois. Quelque chose comme df.ffill (
.
Utilisez last_valid_index
avec resample('M')
.
3 Réponses :
Utilisez groupby
et last
:
# Do this if the index isn't a DatetimeIndex. # df.index = pd.to_datetime(df.index) df.groupby(df.index + pd.offsets.MonthEnd(0)).last() ACA_FP AC_FP AI_FP BDATE 2015-01-31 5.0 0.2 NaN ...
A travaillé comme un charme. Merci beaucoup!
L'utilisation de df.dropna (how = 'all')
supprimera chaque ligne où toutes les valeurs sont NaN
, et vous y conduira la plupart du temps.
Utilisation de resample
df.resample('M').last() Out[82]: ACA_FP AC_FP AI_FP eqt_code 2015-01-31 1.0 0.2 NaN
Vous pensez avoir besoin de dernier
!