如何制作与字符串值对应的整数索引?

问题描述

我目前正在使用 Goodreads 数据构建推荐系统。

我想将字符串用户 ID 更改为整数。 当前用户 ID 如下所示:true

我想将其更改为整数(例如 '0d688fe079530ee1fe6fa85eab10ec5c'12、...),以具有共享相同字符串 ID 的相同整数 ID。我曾考虑使用函数 3,但我不知道如何执行此操作。

如果有人告诉我如何改变,我将不胜感激。

screenshot

解决方法

按照@AsishM 的建议使用 pd.factorize

输入数据:

                            user_id  book_id  ratings
0  831a1e2505e44a2f81e670db82c9a3c0     1942        3
1  58d3869488a648aebef32b6c2ec4fb16     3116        5
2  f05ad4c0978c4d0eb3ca41921f7a80af     3558        4
3  511c8f47d75c427eae8bead7ff80307b     2467        3
4  db74d6df03644e61b4cd830db35de6a8     2318        2
5  58d3869488a648aebef32b6c2ec4fb16     5882        4
6  db74d6df03644e61b4cd830db35de6a8     6318        5
df['uid'] = pd.factorize(df['user_id'])[0]

输出结果:

                            user_id  book_id  ratings  uid
0  831a1e2505e44a2f81e670db82c9a3c0     1942        3    0
1  58d3869488a648aebef32b6c2ec4fb16     3116        5    1  # user 1
2  f05ad4c0978c4d0eb3ca41921f7a80af     3558        4    2
3  511c8f47d75c427eae8bead7ff80307b     2467        3    3
4  db74d6df03644e61b4cd830db35de6a8     2318        2    4  # user 4
5  58d3869488a648aebef32b6c2ec4fb16     5882        4    1  # user 1
6  db74d6df03644e61b4cd830db35de6a8     6318        5    4  # user 4
,

groupby 选项为 groupby ngroup

df['uid'] = df.groupby('user_id',sort=False).ngroup()
                            user_id  book_id  ratings  uid
0  831a1e2505e44a2f81e670db82c9a3c0     1942        3    0
1  58d3869488a648aebef32b6c2ec4fb16     3116        5    1
2  f05ad4c0978c4d0eb3ca41921f7a80af     3558        4    2
3  511c8f47d75c427eae8bead7ff80307b     2467        3    3
4  db74d6df03644e61b4cd830db35de6a8     2318        2    4
5  58d3869488a648aebef32b6c2ec4fb16     5882        4    1
6  db74d6df03644e61b4cd830db35de6a8     6318        5    4

*sort=False 所以 user_id 按照它们在 DataFrame 中出现的顺序分组。


数据帧:

import pandas as pd

df = pd.DataFrame({
    'user_id': ['831a1e2505e44a2f81e670db82c9a3c0','58d3869488a648aebef32b6c2ec4fb16','f05ad4c0978c4d0eb3ca41921f7a80af','511c8f47d75c427eae8bead7ff80307b','db74d6df03644e61b4cd830db35de6a8','db74d6df03644e61b4cd830db35de6a8'],'book_id': [1942,3116,3558,2467,2318,5882,6318],'ratings': [3,5,4,3,2,5]
})