Ниже приведен фрагмент кода, который показывает, как я создаю новый столбец в 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'])