【问题标题】:convert categorical variables changed to numerical codes back to their original form将更改为数字代码的分类变量转换回其原始形式
【发布时间】:2019-07-17 14:23:18
【问题描述】:

我正在创建一个推荐系统,我的数据的其中一列是“codeX”。 codeX 列包含 2278K、5567H、56738P 等形式的产品代码。为了创建稀疏矩阵,我将 codeX 列转换为数字代码。 这是我用来转换的代码

`df['CodeX'] = df['CodeX'].astype("category")
 df['product_id']= df['StockCode'].cat.codes

现在经过所有其他相关计算并拟合模型后,我得到了一组用户的推荐,如下所示:

结果中的每一行代表每个用户的推荐项目列表

recommendation =
array([[2733, 3145, 1019,  402, 2043],
       [2733,  886,  402,  797,  763],
       [1648, 2128, 3216,  797, 1934],
       ...,
       [2903, 1842, 1648, 1841, 1449],
       [1370, 2621,  672, 2440, 2517],
       [ 218, 2705,  809, 1813, 3087]], dtype=int32)

但我希望我的结果包含其原始代码

array([[837Y, 73489U, ...],
       [2837B, 82381W, ...],
       ...,
       [2563Y,27487P, ...]])

我尝试使用查找,以便将值映射到其原始形式

product_lookup= train_df[['product_id','CodeX']].drop_duplicates() product_lookup['product_id']= product_lookup.product_id.astype(str)

但我仍然无法得到结果

我对 python 完全陌生。有人可以指导我如何获得所需格式的结果。

【问题讨论】:

  • 你能给我们更多关于你想要的格式的信息吗? 2278k 之类的是什么意思?
  • @ZacharyOldham 2278K 等是产品代码,数据是分类的,我将其转换为数字代码。现在我希望结果恢复为原始形式(分类)

标签: python arrays dataframe


【解决方案1】:
df['numcode']= df['CodeX'].astype("category").cat.codes    

与其重新格式化现有的列,为什么不创建一个新的列呢?这样您就可以保留原始值。另一种选择是制作字典并将输出映射到字典值。

【讨论】:

  • 那本字典现在看起来是什么样子,然后你又是如何尝试使用它来映射它的?请显示一些输出会有帮助
  • 谢谢!。您的回答帮助我找到了想要的解决方案:)
  • 使用d=dict(enumerate(df['CodeX'].cat.categories)) 我得到了字典 {0: '1002FG', 1: '1012HG',...,..} 并且我想要转换的输出存储在数组'recommendation '。我使用了np.vectorize(d.get)(recommendation) ,我终于看到我的输出为array([['23284M', '22151L', ...],... ..., ['82583N', '85123AY', '21035O', '22151L', '16045M']],
猜你喜欢
  • 2011-12-13
  • 2019-12-07
  • 2022-11-12
  • 2016-11-29
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 2018-06-03
  • 1970-01-01
相关资源
最近更新 更多