簡體   English   中英

用i替換已排序的Pandas數據框列中的每個唯一值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM