我想将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.C

In [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

回到顶部