【问题标题】:Appending data column from one SFrame to another SFrame将数据列从一个 SFrame 附加到另一个 SFrame
【发布时间】:2015-11-17 22:45:31
【问题描述】:

我的训练数据trainSFrame 看起来像这样,有 4 列(“Store”列在此 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]

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

+-------+-----------+
| 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,然后保留列和ise SFrame.add_column()之后:

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')

获得:

+-------+------------+---------+-----------+-----------+
| 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 解决方案)

【问题讨论】:

    标签: python pandas dataframe graphlab sframe


    【解决方案1】:

    您可以使用join 操作来做到这一点。

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

    【讨论】:

    • 谢谢!!这比疯狂的add_column() =) 快很多
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多