Как установить скользящее среднее 5-минутное окно для повторной выборки данных с помощью Pandas Python

Как я могу установить размер окна 5 минут для повторной выборки данных через скользящее среднее? Я пробовал разные способы, но всегда получаю сообщение об ошибке DateTimeIndex, даже мои данные имеют индекс как DateTimeIndex..

Кто-нибудь знает, как это сделать??

Данные

                index   Speed   rolling_meanVal
DateTime            
1/1/2011 0:04   2165    0.057579    NaN
1/1/2011 0:07   3438    0.044646    NaN
1/1/2011 0:10   4713    0.043154    NaN
1/1/2011 0:13   6054    0.014403    NaN
1/1/2011 0:16   7385    0.038972    0.039751
1/1/2011 0:19   8734    0.019927    0.036447
1/1/2011 0:21   10045   0.039548    0.03689
1/1/2011 0:24   11374   0.089709    0.043492
1/1/2011 0:27   12661   0.102816    0.050084
1/1/2011 0:30   13960   0.119699    0.057045
1/1/2011 0:33   15261   0.095108    0.060505
1/1/2011 0:36   16579   0.051854    0.059784
1/1/2011 0:40   17848   0.035654    0.057928
1/1/2011 0:43   19163   0.083695    0.059769
1/1/2011 0:46   20458   0.091149    0.061861
1/1/2011 0:49   21784   0.082233    0.063134
1/1/2011 0:52   23105   0.043388    0.061972
1/1/2011 0:55   24415   0.032073    0.060311
1/1/2011 0:58   25689   0.108548    0.06285
1/1/2011 0:59   27117   0.140965    0.066756
1/1/2011 1:02   28492   0.029816    0.065368
1/1/2011 1:05   29861   0.028124    0.064542
1/1/2011 1:09   31195   0.042464    0.064507
1/1/2011 1:12   32471   0.065898    0.067082
1/1/2011 1:15   33793   0.128899    0.071578
1/1/2011 1:18   35094   0.019488    0.071556
1/1/2011 1:21   36407   0.041034    0.071631
1/1/2011 1:24   37728   0.038828    0.069087
1/1/2011 1:27   39053   0.039328    0.065912
1/1/2011 1:30   40340   0.080378    0.063946

вот пример данных. Если я хочу взять скользящее среднее значение 5 минут размера окна? я попробовал код

result_frame['Speed'].rolling(window=20,min_periods=5).mean().rename('rollingmenaVal')

но не понял как поставить частоту 5 минут? любая помощь


person id101112    schedule 03.03.2018    source источник
comment
не могли бы вы поделиться некоторыми данными, чтобы мы могли точно увидеть, что вы пытаетесь сделать?   -  person quantif    schedule 03.03.2018
comment
Вы пробовали DataFrame.rolling?   -  person quantif    schedule 03.03.2018
comment
Я разместил образцы данных, да, я пробовал этот метод   -  person id101112    schedule 03.03.2018


Ответы (1)


ваше окно будет '5T' в течение 5 минут,

df['rollingmeanVal'] = df.rolling('5T').Speed.mean()

                     index     Speed  rollingmeanVal
DateTime                                            
2011-01-01 00:04:00   2165  0.057579        0.057579
2011-01-01 00:07:00   3438  0.044646        0.051112
2011-01-01 00:10:00   4713  0.043154        0.043900
2011-01-01 00:13:00   6054  0.014403        0.028779
2011-01-01 00:16:00   7385  0.038972        0.026687
2011-01-01 00:19:00   8734  0.019927        0.029449
2011-01-01 00:21:00  10045  0.039548        0.029738
2011-01-01 00:24:00  11374  0.089709        0.064629
2011-01-01 00:27:00  12661  0.102816        0.096263
2011-01-01 00:30:00  13960  0.119699        0.111258
2011-01-01 00:33:00  15261  0.095108        0.107404
2011-01-01 00:36:00  16579  0.051854        0.073481
2011-01-01 00:40:00  17848  0.035654        0.043754
2011-01-01 00:43:00  19163  0.083695        0.059675
2011-01-01 00:46:00  20458  0.091149        0.087422
2011-01-01 00:49:00  21784  0.082233        0.086691
2011-01-01 00:52:00  23105  0.043388        0.062811
2011-01-01 00:55:00  24415  0.032073        0.037731
2011-01-01 00:58:00  25689  0.108548        0.070311
2011-01-01 00:59:00  27117  0.140965        0.093862
2011-01-01 01:02:00  28492  0.029816        0.093110
2011-01-01 01:05:00  29861  0.028124        0.028970
2011-01-01 01:09:00  31195  0.042464        0.035294
2011-01-01 01:12:00  32471  0.065898        0.054181
2011-01-01 01:15:00  33793  0.128899        0.097399
2011-01-01 01:18:00  35094  0.019488        0.074194
2011-01-01 01:21:00  36407  0.041034        0.030261
2011-01-01 01:24:00  37728  0.038828        0.039931
2011-01-01 01:27:00  39053  0.039328        0.039078
2011-01-01 01:30:00  40340  0.080378        0.059853
person DJK    schedule 03.03.2018
comment
Я пробовал это, но получаю следующее сообщение об ошибке. ValueError: cannot reindex from a duplicate axis - person id101112; 04.03.2018
comment
@Ravi, у вас есть повторяющиеся значения даты и времени в вашем индексе? - person DJK; 04.03.2018
comment
Я использовал это условие здесь, чтобы избавиться от повторяющихся значений np.where(df1['CheckID'] != True, df1.rolling('10T').Speed.mean(), np.nan), но я получаю сообщение об ошибке ValueError: index must be monotonic что это значит? любое решение? - person id101112; 05.03.2018
comment
@Ravi, может показаться, что ваши значения даты и времени не отсортированы - person DJK; 05.03.2018
comment
они отсортированы по данным даты и времени идентификатора, например, вы можете видеть данные, только для одного идентификатора, когда этот идентификатор закончится, другой идентификатор начнется с тех же значений даты и времени, поэтому я использую np.where, так что это может работать до тех пор, пока идентификатор не закончится, и он начнется снова, откуда идентификатор меняется, или мое условие неверно, если оно неправильно, вы можете его исправить? - person id101112; 05.03.2018
comment
Если у вас есть уникальные идентификаторы, вам также следует выполнить операцию groupby, т.е. df1.groupby('id').rolling('10T').Speed.mean(), просто убедитесь, что у вас есть сортировка по возрастанию, прежде чем вы это сделаете, т.е. df1.sort_values(['id',df.index]) - person DJK; 05.03.2018
comment
Большое спасибо, я попробовал, но у меня не работал другой способ, df1['Speed'].rolling(20, '5min').mean() я пытался так, я сделал это в соответствии с задокументированным методом, но ваш метод работает, спасибо - person id101112; 06.03.2018