如何通过匹配Python中不同长度的字典中的值来替换列值?

时间:2017-07-17 17:52:10

标签: python scala pandas dictionary apache-spark

我有一个看起来像这样的数据框

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

编辑:作为后续问题,如果我在Spark RDD中拥有相同的数据,我将如何在Scala中处理它?<​​/ p>

1 个答案:

答案 0 :(得分: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列转换为分类dtype:

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