У меня есть df1, для которого мне нужно добавить дополнительный столбец для произведения df1.Amount и столбец df2, условный в строках df1.Q.
Мое решение, приведенное ниже, хорошо работает для низких значенийn, но при n = 100000 решение занимает больше времени, чем вложенное, если в Excel.
import pandas as pd
import numpy as np
import time
def iRw(Q,T):
vol = 'R' if Q in ['q1','q2','q3'] else 'L' if Q == 'q4' else 'H'
w = float(df2.loc[(df2.T == T), vol].values)
return w
n = 10000
Q = ['q1','q2','q3','q4','q5']
T = ['t1','t2','t3','t4','t5']
df1 = pd.DataFrame({'Id': [i for i in range(n)],
'Q': [Q[np.random.randint(len(Q))] for i in range(n)],
'T': [T[np.random.randint(len(T))] for i in range(n)],
'Amount': np.random.randn(n)})
df2 = pd.DataFrame({'Tenor': T,
'R':np.random.randn(len(T)),
'L':np.random.randn(len(T)),
'H':np.random.randn(len(T))})
tic = time.time()
df1['Product'] = df1.apply(lambda x: x.Amount * iRw(x.Q, x.T), axis = 1)
toc = time.time()
print(toc-tic)
Может кто-нибудь порекомендовать более быстрый метод, который сокращает время процесса, описанное выше?
Заранее спасибо