如何通过在 Graphlab SFrame 中划分两列来创建新列?

How to create a new column by dividing two columns in Graphlab SFrame?

给定一个 Graphlab SFrame:

+-------+------------+---------+-----------+
| Store |    Date    |  Sales  | Customers |
+-------+------------+---------+-----------+
|   1   | 2015-07-31 |  5263.0 |   555.0   |
|   2   | 2015-07-31 |  6064.0 |   625.0   |
|   3   | 2015-07-31 |  8314.0 |   821.0   |
|   4   | 2015-07-31 | 13995.0 |   1498.0  |
|   3   | 2015-07-20 |  4822.0 |   559.0   |
|   2   | 2015-07-10 |  5651.0 |   589.0   |
|   4   | 2015-07-11 | 15344.0 |   1414.0  |
|   5   | 2015-07-23 |  8492.0 |   833.0   |
|   2   | 2015-07-19 |  8565.0 |   687.0   |
|   10  | 2015-07-09 |  7185.0 |   681.0   |
+-------+------------+---------+-----------+
[986159 rows x 4 columns]

如何通过将每一行的销售额除以客户来添加 "Sales per Customer" 列?

我尝试了以下但它们不起作用(sf 是我的 SFrame:

sf['salespercustomer'] = sf.apply(lambda x: sf['Sales']/sf['Customers'])

有趣的是,我得到了 SArray 的输出:

sf['Sales'] / sf['Customers']

但这并不能真正帮助将列添加回 sf,所以这不起作用 =( :

sf['salescustomer'] = sf['Sales'] / sf['Customers']

最后一行代码应该可以解决问题,但是您说您的 SFrame 被称为 sf,而不是 train。当我用 sf 尝试时,它工作正常。

这就是我要做的。

sf['salespercustomer'] = sf['Sales','Customers'].apply(lambda row: row['Sales']/row['Customers'])

FWIW,您的示例将整个 sf 作为参数 x 传递给 apply lambda,但您使用了 sf。我的理解是 sf 在 lambda 函数中是未知的,但是 x 的别名是。

FWIW,您可以像这样进行单列操作:

sf['sales25percentdiscount'] = sf['Sales'].apply(lambda x: x*.0.75)

由于只指定了一列,所以不需要在lambda函数中指定列。