2 votes

Pandas asfreq avec fréquence hebdomadaire

J'ai des données hebdomadaires de journaux pour certains appareils. Pour certains appareils, les logs commencent le lundi, pour d'autres le mercredi, etc. Parfois, il y a des trous de ~mois dans ces données, mais je veux que l'index DataFrame contienne toujours des lignes pour chaque semaine avec une valeur NaN.

J'essaie d'utiliser asfreq('W') en Python, mais je ne parviens pas à obtenir ce que j'attends.

Exemple :

Ce que j'ai :

Date            Some_Value
====            ==========
2019-04-10      2
2019-04-17      1
2019-04-24      3
2019-05-01      1
2019-05-08      3
2019-05-15      2
2019-06-06      3
2019-06-13      2

Ce que j'attends/veux avoir (noter 2 nouvelles lignes avec NaNs) :

Date            Some_Value
====            ==========
2019-04-10      2
2019-04-17      1
2019-04-24      3
2019-05-01      1
2019-05-08      3
2019-05-15      2
2019-05-22      NaN
2019-05-30      NaN
2019-06-06      3
2019-06-13      2

Ce que j'obtiens avec asfreq('W') :

Date            Some_Value
====            ==========
2019-03-31      NaN
2019-04-07      NaN
2019-04-14      NaN
...................

Donc, j'ai tout NaN et les dates de chaque dimanche. Mais je n'ai pas besoin des dates de chaque dimanche. J'ai besoin de prendre la première date d'un DataFrame (de la première ligne d'un groupe dans pandas' groupby dans le cas de nombreuses séries temporelles) et rééchantillonner chaque semaine à partir de cette première ligne.

Est-il possible de le faire directement avec les pandas ? asfreq ? Avec une autre méthode pandas ? Ou doit-il s'agir d'une fonction personnalisée plus complexe ?

Merci.

2voto

jezrael Points 290608

Le problème est que dans vos données, les premières valeurs sont dans le mercredi, les 2 dernières dans le jeudi, donc le retour asfreq NaN s, car essayez de le changer en dimanche jour de semaine freq - documents :

W-SUN fréquence hebdomadaire (dimanche). Identique à 'W'

Une solution possible, mais DatetimeIndex est modifié pour les dimanches :

print (df.resample('W').first())
            Some_Value
Date                  
2019-04-14         2.0
2019-04-21         1.0
2019-04-28         3.0
2019-05-05         1.0
2019-05-12         3.0
2019-05-19         2.0
2019-05-26         NaN
2019-06-02         NaN
2019-06-09         3.0
2019-06-16         2.0

Si la fréquence de changement en asfreq :

print (df.asfreq('W-Wed'))
            Some_Value
Date                  
2019-04-10         2.0
2019-04-17         1.0
2019-04-24         3.0
2019-05-01         1.0
2019-05-08         3.0
2019-05-15         2.0
2019-05-22         NaN
2019-05-29         NaN
2019-06-05         NaN
2019-06-12         NaN

print (df.asfreq('W-Thu'))
            Some_Value
Date                  
2019-04-11         NaN
2019-04-18         NaN
2019-04-25         NaN
2019-05-02         NaN
2019-05-09         NaN
2019-05-16         NaN
2019-05-23         NaN
2019-05-30         NaN
2019-06-06         3.0
2019-06-13         2.0

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X