我在下面有 Pandas 数据框,我想用一个新列屏蔽 ProductId 列。将每个 id 分配给一个新的数值。我怎样才能做到这一点? 谢谢
import pandas as pd
df=pd.DataFrame({'ProductId':['AXX11','CS22','AXX11','FV34','FV34','DF23','CS22'],'Sales':
[10,34,23,45,23,54,65]})
df
预期结果如下:
ProductId Mask_ProductId Sales
AXX1 20 10
CS22 21 34
AXX1 20 23
FV34 8 45
FV34 8 23
DF23 12 54
CS22 21 65
请帮忙谢谢
答案 0 :(得分:3)
使用categorical
:
In [96]: df['Mask_ProductId'] = df.ProductId.astype('category').cat.codes
In [97]: df
Out[97]:
ProductId Sales Mask_ProductId
0 AXX11 10 0
1 CS22 34 1
2 AXX11 23 0
3 FV34 45 3
4 FV34 23 3
5 DF23 54 2
6 CS22 65 1
答案 1 :(得分:1)
使用 factorize
并添加 DataFrame.insert
:
df.insert(1, 'Mask_ProductId', pd.factorize(df['ProductId'])[0])
print (df)
ProductId Mask_ProductId Sales
0 AXX11 0 10
1 CS22 1 34
2 AXX11 0 23
3 FV34 2 45
4 FV34 2 23
5 DF23 3 54
6 CS22 1 65