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 !