3 votes

Comment faire éclater la période de la semaine en plusieurs lignes dans un cadre de données ?

J'ai un df de pandas qui a été créé en utilisant groupby(df['date'].dt.to_period('W-SAT')).agg({'price': 'mean'}) . Je veux maintenant développer ce tableau de façon à ce que chaque date reçoive une ligne qui inclut la moyenne de la semaine. Comment dois-je m'y prendre ? Voici un exemple

date                    avg_price
2020-02-09/2020-02-15   6.438312    
2020-02-16/2020-02-22   3.477643    
2020-02-23/2020-02-29   8.784417    
2020-03-01/2020-03-07   12.897191   

et je veux qu'il ressemble à

date                    avg_price
2020-02-09              6.438312    
2020-02-10              6.438312    
2020-02-11              6.438312    
2020-02-12              6.438312

Merci !

4voto

Nuri Taş Points 11

D'abord, obtenir la représentation de l'horodatage de date :

df['date'] =  df.date.dt.to_timestamp('D')

qui reviendra :

        date    avg_price
0   2020-02-09  6.438312
1   2020-02-16  3.477643
2   2020-02-23  8.784417
3   2020-03-01  12.897191

Ensuite, fixez date comme index, utilisez asfreq avec une fréquence quotidienne et remplir les valeurs nulles :

df.set_index('date').asfreq('D').ffill().reset_index()

et vous l'avez fait :

        date    avg_price
0   2020-02-09  6.438312
1   2020-02-10  6.438312
2   2020-02-11  6.438312
3   2020-02-12  6.438312
4   2020-02-13  6.438312
5   2020-02-14  6.438312
6   2020-02-15  6.438312
7   2020-02-16  3.477643
8   2020-02-17  3.477643
9   2020-02-18  3.477643
10  2020-02-19  3.477643
11  2020-02-20  3.477643
12  2020-02-21  3.477643
13  2020-02-22  3.477643
14  2020-02-23  8.784417
15  2020-02-24  8.784417
16  2020-02-25  8.784417
17  2020-02-26  8.784417
18  2020-02-27  8.784417
19  2020-02-28  8.784417
20  2020-02-29  8.784417
21  2020-03-01  12.897191

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