Ускорить панд VWAP - PullRequest
       31

Ускорить панд VWAP

0 голосов
/ 23 января 2019

Я рассчитываю VWAP (средневзвешенную цену) инструмента следующим образом:

def vwap(df):
    df = df[['Price', 'Volume']].dropna()
    denominator = (df.Price * df.Volume).sum()
    numerator = df.Volume.sum()
    if denominator == 0:
        return np.nan
    return denominator/numerator

df.resample('10T', label='right').apply(vwap)

Это занимает около 5 минут для минутных данных, охватывающих несколько лет.Я изучал Dask и Swifter, но ни один из них не обеспечивает параллелизации для 'DatetimeIndexResampler' объектов, поскольку, как я полагаю, методы должны заранее знать, как разбивать данные.

Есть ли у кого-нибудь интуиция каккак ускорить этот процесс?

Обратите внимание, что исходный df содержит отдельные данные в зависимости от того, когда была совершена сделка, поэтому некоторые 10-минутные интервалы могут не содержать никаких данных, а другие могут содержать несколько строк.

Итак,если я сделаю это: undl.resample('10T', label='right').swifter.apply(last_vwap)

Я получу

<ipython-input-162-c879f56543fb> in <module>
----> 1 undl.resample('10T', label='right').swifter.apply(last_vwap)

> ~/.local/lib/python3.6/site-packages/pandas/core/resample.py in __getattr__(self, attr)
     95             return self[attr]
     96 
---> 97         return object.__getattribute__(self, attr)
     98 
     99     @property

> AttributeError: 'DatetimeIndexResampler' object has no attribute 'swifter'

Но если я использую dask для преобразования его в фрейм данных, я не знаю, сколько разделов использовать, начиная с числатиков за 10-минутный интервал не соответствует.

...