Векторизация pandas get_lo c в несколько значений из двух df с разными частотами меток времени - PullRequest
0 голосов
/ 09 февраля 2020

Ниже приведен фрагмент кода, который показывает, как я создаю новый столбец в df под названием «vals1 * vals2», ища ближайшее значение «val2» в серии «s» с другой частотой отметки времени. Обычно частота в df может быть секундами, а частота в df может быть днями. Между временными метками значения в серии 's' остаются постоянными.

Приведенный ниже код работает нормально, но я ищу способ векторизации или иного ускорения, чтобы он работал быстро на df с сотнями тысяч временных отметок. Спасибо!

import datetime
import numpy as np
import pandas as pd

dstart = datetime.datetime(2019,1,1)
dend = datetime.datetime(2019,2,1)

vals1 = []
index1 = []

vals2 = []
index2 = []

for i in range(0,10):
    vals1.append(i*1.5)
    index1.append(dstart + datetime.timedelta(days=i*0.1))

for i in range(0,10):
    vals2.append(i/12)
    index2.append(dstart + datetime.timedelta(days=i*0.5))

df = pd.DataFrame(vals1, index = index1)
s = pd.Series(vals2, index = index2)

print()
print('The df of interest:')
print(df)

print()
print('The series with more infrequent data that needs to be reference:')
print(s)

df['vals1*vals2'] = np.nan
for i in df.index:
    nearestIndex = s.index.get_loc(i, method='nearest')
    s[nearestIndex]
    df['vals1*vals2'][i] = df[0][i] * s[nearestIndex]

print()    
print('The product of the original values from the df and the nearest values from the series:')
print(df['vals1*vals2'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...