gpt4 book ai didi

python - 用 i 替换已排序的 Pandas 数据框列中的每个唯一值

转载 作者:太空宇宙 更新时间:2023-11-04 00:39:20 24 4
gpt4 key购买 nike

我有一个 pandas 数据框,其中包含大约 40 个字符长的用户 ID 列表。我想用每个 ID 从 0 开始的数字替换这些用户 ID,以节省空间。

我有什么:

userID      itemID
------------------
3a r5
3a r6
4b r5
4c r6

我需要什么:

 userID      itemID
------------------
0 r5
0 r6
1 r5
2 r6

最佳答案

使用pd.factorize() :

In [145]: df
Out[145]:
userID itemID
0 3a r5
1 3a r6
2 4b r5
3 4c r6

In [146]: df.userID = pd.factorize(df.userID)[0]

In [147]: df
Out[147]:
userID itemID
0 0 r5
1 0 r6
2 1 r5
3 2 r6

如果您的主要目标是节省内存 - 您可以对您的列进行分类:

In [155]: df = pd.concat([df] * 5, ignore_index=True)

In [156]: df
Out[156]:
userID itemID
0 3a r5
1 3a r6
2 4b r5
3 4c r6
4 3a r5
5 3a r6
6 4b r5
7 4c r6
8 3a r5
9 3a r6
10 4b r5
11 4c r6
12 3a r5
13 3a r6
14 4b r5
15 4c r6
16 3a r5
17 3a r6
18 4b r5
19 4c r6

In [157]: df.memory_usage()
Out[157]:
Index 80
userID 160
itemID 160
dtype: int64

分类用户ID:

In [158]: df.userID = df.userID.astype('category')

In [159]: df.memory_usage()
Out[159]:
Index 80
userID 44 # <------------ NOTE:
itemID 160
dtype: int64

In [160]: df
Out[160]:
userID itemID
0 3a r5
1 3a r6
2 4b r5
3 4c r6
4 3a r5
5 3a r6
6 4b r5
7 4c r6
8 3a r5
9 3a r6
10 4b r5
11 4c r6
12 3a r5
13 3a r6
14 4b r5
15 4c r6
16 3a r5
17 3a r6
18 4b r5
19 4c r6

In [161]: df.dtypes
Out[161]:
userID category
itemID object
dtype: object

关于python - 用 i 替换已排序的 Pandas 数据框列中的每个唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42568091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com