【发布时间】:2019-03-28 17:29:55
【问题描述】:
我有 df1,我需要为 df1.Amount 的乘积添加一个额外的列,并以 df1.Q 的行为条件添加一个 df2 列。
我下面的解决方案适用于 n 的低值,但由于 n = 100000,该解决方案比 excel 上的嵌套 if 需要更长的时间。
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)
有人可以推荐一种更快的方法来缩短上述处理时间吗?
提前致谢
【问题讨论】:
-
感谢 unutbu 的更正
标签: python pandas conditional