我想将pandas DataFrame中的两列相乘并将结果添加到新列中
我正在尝试将pandas Dataframe(orders_df)中的两个现有列相乘-
价格(股票收盘价)和Amount(股票数量),并将计算结果添加到名为“值”的新列中。由于某些原因,当我运行此代码时,“值”列下的所有行均为正数,而某些行应为负数。在DataFrame的“操作”列下,有七行带有“出售”字符串,七行带有“购买”字符串。
for i in orders_df.Action: if i == 'Sell':
orders_df['Value'] = orders_df.Prices*orders_df.Amount
elif i == 'Buy':
orders_df['Value'] = -orders_df.Prices*orders_df.Amount)
请让我知道我在做什么错!
回答:
如果我们愿意牺牲海顿解决方案的简洁性,则还可以执行以下操作:
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 transaction
Out[23]:
Prices Amount Action C
0 3 57 Sell 1
1 89 42 Sell 1
2 45 70 Buy -1
3 6 43 Sell 1
4 60 47 Sell 1
5 19 16 Buy -1
6 56 89 Sell 1
7 3 28 Buy -1
8 56 69 Sell 1
9 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 dataframe
Out[25]:
Prices Amount Action C Value
0 3 57 Sell 1 171
1 89 42 Sell 1 3738
2 45 70 Buy -1 -3150
3 6 43 Sell 1 258
4 60 47 Sell 1 2820
5 19 16 Buy -1 -304
6 56 89 Sell 1 4984
7 3 28 Buy -1 -84
8 56 69 Sell 1 3864
9 90 49 Buy -1 -4410
此解决方案采用两行代码而不是一行,但更易于阅读。我怀疑计算成本也差不多。
以上是 我想将pandas DataFrame中的两列相乘并将结果添加到新列中 的全部内容, 来源链接: utcz.com/qa/422563.html