如何通过在 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函数中指定列。
给定一个 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函数中指定列。