如果我们愿意牺牲海顿解决方案的简洁性,则还可以执行以下 *** 作:
In [22]: orders_df['C'] = orders_df.Action.apply( lambda x: (1 if x == 'Sell' else -1))In [23]: orders_df # New column C represents the sign of the transactionOut[23]: Prices Amount Action C0 3 57 Sell 11 89 42 Sell 12 45 70 Buy -13 6 43 Sell 14 60 47 Sell 15 19 16 Buy -16 56 89 Sell 17 3 28 Buy -18 56 69 Sell 19 90 49 Buy -1
现在我们不再需要该
if声明了。使用
Dataframe.apply(),我们也消除了
for循环。正如Hayden所指出的,矢量化运算总是更快。
In [24]: orders_df['Value'] = orders_df.Prices * orders_df.Amount * orders_df.CIn [25]: orders_df # The resulting dataframeOut[25]: Prices Amount Action C Value0 3 57 Sell 1 1711 89 42 Sell 1 37382 45 70 Buy -1 -31503 6 43 Sell 1 2584 60 47 Sell 1 28205 19 16 Buy -1 -3046 56 89 Sell 1 49847 3 28 Buy -1 -848 56 69 Sell 1 38649 90 49 Buy -1 -4410
此解决方案采用两行代码而不是一行,但更易于阅读。我怀疑计算成本也差不多。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)