J'ai une trame de données avec plus de 1 mil de valeurs. La tâche consiste à résumer ces valeurs dans la plage de toutes les 5 minutes. En d'autres termes, de 0 à 5 premières minutes, puis 10 minutes, puis 15 et ainsi de suite. Mais il y a plus de 30 à 33 jours. Voici mes données:

                                    Size
                        DateTime                              
2018-10-19 04:14:01.015000+00:00     2
2018-10-19 04:14:01.546000+00:00     1
2018-10-19 04:15:01.290000+00:00     1
2018-10-19 04:15:01.291000+00:00    10
2018-10-19 04:15:01.821000+00:00     1
2018-10-19 04:15:01.821000+00:00     1
2018-10-19 04:15:02.352000+00:00     1
2018-10-19 04:15:02.352000+00:00     1
2018-10-19 04:15:02.883000+00:00     1
2018-10-19 04:15:02.884000+00:00     1
2018-10-19 04:15:03.413000+00:00     1
2018-10-19 04:15:03.414000+00:00     1
2018-10-19 04:15:03.943000+00:00     1
2018-10-19 04:15:03.943000+00:00     1
2018-10-19 04:15:04.474000+00:00     1
2018-10-19 04:15:04.474000+00:00     1
2018-10-19 04:15:05.003000+00:00     1
2018-10-19 04:15:05.003000+00:00     1
2018-10-19 04:15:05.334000+00:00     1
2018-10-19 04:15:05.336000+00:00     1
...
2018-11-26 19:59:33.928000+00:00     1
2018-11-26 19:59:37.221000+00:00     1
2018-11-26 19:59:41.808000+00:00     1
2018-11-26 19:59:42.338000+00:00     1
2018-11-26 19:59:45.520000+00:00     1
2018-11-26 19:59:52.059000+00:00     1
2018-11-26 19:59:52.589000+00:00     1
2018-11-26 19:59:54.714000+00:00     1
2018-11-26 19:59:55.244000+00:00     1
2018-11-26 19:59:56.297000+00:00     1
2018-11-26 19:59:57.888000+00:00     1
2018-11-26 19:59:59.008000+00:00     1
2018-11-26 20:00:00.071000+00:00     1
2018-11-26 20:51:04.606000+00:00     1
2018-11-26 20:51:57.307000+00:00     1

Comme vous pouvez le voir, il y a assez de rangées là-dedans. J'ai quelques idées sur la façon de le faire, mais je suis coincé. Eh bien, la plage de données pourrait être définie comme:

data[data.index.minute % 5 == 0]

Mais comment pourrais-je additionner des valeurs avant cela et dans la plage suivante?

0
SomeOneInteresting 14 mars 2019 à 21:41

2 réponses

Meilleure réponse

Avec resample:

data.resample('5min')['Size'].sum()
1
perl 14 mars 2019 à 19:10

Utilisez pd.Grouper() ici avec freq=5min

remarque Je n'ai utilisé que les premières lignes de vos exemples de données, au-dessus du ..

df_sum = df.groupby(pd.Grouper(key='DateTime', freq='5min', axis=1)).Size.sum().reset_index()

print(df_sum)

             DateTime  Size
0 2018-10-19 04:10:00     3
1 2018-10-19 04:15:00    27
1
Erfan 14 mars 2019 à 19:15