[英]Replace each unique value in a sorted Pandas dataframe column with i
我有一個熊貓數據框,其中列出了大約40個字符長的用戶ID。 我想將這些用戶ID替換為每個ID從0開始的數字i,以節省空間。
我有的:
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
對userID
分類:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.