2017-07-17 61 views
0

我有一個數據幀樣的,看起來像這樣如何通過在Python中匹配不同長度的字典中的值來替換列值?

ID Color 
A red 
B green 
C red 
D yellow 

我已經通過創建一個字典中列舉的顏色成數字:

color_list = ['red', 'green', 'yellow'] 
colors = dict(enumerate(color_list)) 

現在我該怎樣與替換列值,基本顏色的ID,以使得數據幀將如下所示:

ID Color 
A 1 
B 2 
C 1 
D 3 

EDIT:作爲弗洛回答問題,如果我在Spark RDD中擁有相同的數據,我將如何在Scala中處理它?

回答

2

使用pd.factorize()

df['Color'] = pd.factorize(df['Color'])[0] 

演示:

In [19]: df 
Out[19]: 
    ID Color 
0 A  red 
1 B green 
2 C  red 
3 D yellow 

In [20]: df['Color'] = pd.factorize(df['Color'])[0] 

In [21]: df 
Out[21]: 
    ID Color 
0 A  0 
1 B  1 
2 C  0 
3 D  2 

我們也可以Code列轉換爲絕對D型:

In [24]: df['Color'] = df['Color'].astype('category') 

In [25]: df 
Out[25]: 
    ID Color 
0 A  red 
1 B green 
2 C  red 
3 D yellow 

In [26]: df.dtypes 
Out[26]: 
ID   object 
Color category # <---------- 
dtype: object 

我們可以使用分類碼(數字):

In [27]: df.Color.cat.codes 
Out[27]: 
0 1 
1 0 
2 1 
3 2 
dtype: int8