Расчет последнего значения для таймфрейма - PullRequest
0 голосов
/ 25 марта 2019

У меня есть таблица, в которой мне нужно рассчитать значение Max для значения Last за период времени 15 минут. Ожидаемый столбец - это столбец «MAX». Я хотел бы получить максимальное значение Last для интервала времени 15 минут. Я не говорил о групере 15 минут. но за 15 минут, как вы можете видеть в столбце Макс, который является моим ожидаемым результатом. Я хочу, чтобы это было в питоне.

Я пытался:

df2 = df.resample('15min').fillna(np.nan)
df2 = df2['Last'].rolling('15min').max()
df.join(df2,rsuffix='2')

Но я получаю ошибку, а также кое-что, где мне не хватает логики. Не уверен, где это может быть.

row      Timestamp     Last                 MAX

 1    1/20/19 12:15    
 2    1/20/19 12:17    3071.56       
 3    1/20/19 12:17    3097.82         
 4    1/20/19 12:18    3097.82        
 5    1/20/19 12:19    3000        
 6    1/20/19 12:20    3002        
 7    1/20/19 12:21    3001        
 8    1/20/19 12:22    3000        
 9    1/20/19 12:23    3001        
 10   1/20/19 12:24    3001        
 11   1/20/19 12:25    3002        
 12   1/20/19 12:26    3003        
 13   1/20/19 12:27    3004        
 14   1/20/19 12:29    3003        
 15   1/20/19 12:29    3003        
 16   1/20/19 12:30    2000                3097.82(o2:o16)               
 17   1/20/19 12:31    3000                3097.82(o3:o17)               
 18   1/20/19 12:32    3000                3097.82(o4:o18)

Ошибка:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-94-20b68e6d5add> in <module>()
      8     #df[c] = df['ChangeDirection'].eq(c).rolling('15min').sum()
      9 #df.loc[:df.index[0] + pd.Timedelta(16*60, unit="s"), cols] = np.nan
---> 10 df2 = df.resample('15min').fillna(np.nan)
     11 #df2 = df2['Last'].rolling('15min').max()
     12 #df.join(df2,rsuffix='2')

/usr/local/lib/python3.6/site-packages/pandas/core/resample.py in fillna(self, method, limit)
    679         .. [1] https://en.wikipedia.org/wiki/Imputation_(statistics)
    680         """
--> 681         return self._upsample(method, limit=limit)
    682 
    683     @Appender(_shared_docs['interpolate'] % _shared_docs_kwargs)

/usr/local/lib/python3.6/site-packages/pandas/core/resample.py in _upsample(self, method, limit, fill_value)
    966         else:
    967             result = obj.reindex(res_index, method=method,
--> 968                                  limit=limit, fill_value=fill_value)
    969 
    970         result = self._apply_loffset(result)

/usr/local/lib/python3.6/site-packages/pandas/util/_decorators.py in wrapper(*args, **kwargs)
    184         @wraps(func)
    185         def wrapper(*args, **kwargs):
--> 186             return func(*args, **kwargs)
    187 
    188         if not PY2:

/usr/local/lib/python3.6/site-packages/pandas/core/frame.py in reindex(self, *args, **kwargs)
   3561         kwargs.pop('axis', None)
   3562         kwargs.pop('labels', None)
-> 3563         return super(DataFrame, self).reindex(**kwargs)
   3564 
   3565     @Appender(_shared_docs['reindex_axis'] % _shared_doc_kwargs)

/usr/local/lib/python3.6/site-packages/pandas/core/generic.py in reindex(self, *args, **kwargs)
   3648         # construct the args
   3649         axes, kwargs = self._construct_axes_from_arguments(args, kwargs)
-> 3650         method = missing.clean_reindex_fill_method(kwargs.pop('method', None))
   3651         level = kwargs.pop('level', None)
   3652         copy = kwargs.pop('copy', True)

/usr/local/lib/python3.6/site-packages/pandas/core/missing.py in clean_reindex_fill_method(method)
    595 
    596 def clean_reindex_fill_method(method):
--> 597     return clean_fill_method(method, allow_nearest=True)
    598 
    599 

/usr/local/lib/python3.6/site-packages/pandas/core/missing.py in clean_fill_method(method, allow_nearest)
     92         msg = ('Invalid fill method. Expecting {expecting}. Got {method}'
     93                .format(expecting=expecting, method=method))
---> 94         raise ValueError(msg)
     95     return method
     96 

ValueError: Invalid fill method. Expecting pad (ffill), backfill (bfill) or nearest. Got nan

1 Ответ

0 голосов
/ 25 марта 2019

Формула сделает это. Поместите это в P3 и перетащите вниз.

=MAX(O3:INDEX(O:O, AGGREGATE(15, 7, ROW($2:3)/(N$2:N3>=(N3-TIME(0, 15, 0))), 1)))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...