首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据列从一个SFrame追加到另一个SFrame

将数据列从一个SFrame追加到另一个SFrame
EN

Stack Overflow用户
提问于 2015-11-17 22:45:31
回答 1查看 819关注 0票数 0

我的培训数据train SFrame看起来像这样,有4列( "Store“列是非唯一的SFrame中的):

代码语言:javascript
复制
+-------+------------+---------+-----------+
| 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]

给定第二个store SFrame ( "Store“列在此SFrame中是唯一的):

代码语言:javascript
复制
+-------+-----------+
| Store | StoreType |
+-------+-----------+
|   1   |     c     |
|   2   |     a     |
|   3   |     a     |
|   4   |     c     |
|   5   |     a     |
|   6   |     a     |
|   7   |     a     |
|   8   |     a     |
|   9   |     a     |
|   10  |     a     |
+-------+-----------+

我可以将适当的StoreType附加到我的train SFrame上,方法是遍历train中的每一行,然后从store中找到合适的StoreType,然后保留该列,然后再修改SFrame.add_column()

代码语言:javascript
复制
store_type_col = []
for row in train:
    row_store = row['Store']
    row_storetype = next(i for i in store if i['Store'] == row_store)['StoreType']
    store_type_col.append(row_storetype)

train.add_column(graphlab.SArray(store_type_col, dtype=str), name='StoreType')

得到:

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

但我确信,使用Graphlab有一种更简单、更快的方法来实现这一点。目前的方法存在O(n*m)的最坏情况,其中n= no。train和m= no中的行。m中的行。

假设我的store SFrame有8个列,我想将它们附加到train中。上面的代码会非常低效。

,否则如何将数据列从一个SFrame添加到另一个SFrame? (Pandas解决方案也是受欢迎的)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-18 08:00:55

您可以使用join操作来完成此操作。

out = train.join(store, on = 'Store')

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33768546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档