我有一个这样的DataFrame对象
ColumnOne | ColumnTwo
ABCD | red
ABCD | blue
EFGH | green
IJKL | white
我想要一个这样的DataFrame对象
ColumnOne | ColumnTwo | ColumnThree
ABCD | red | 0
ABCD | blue | 0
EFGH | green | 1
IJKL | white | 2
基于ColumnOne元素,我该怎么做?
答案 0 :(得分:2)
我认为您正在寻找pd.factorize()
。从文档:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.factorize.html
将Series
传递到pd.factorize()
返回两个数组:labels
和uniques
。 labels
是类别的数字编码,而uniques
是您刚刚传入的Series
中唯一值的数组。因此,您可以舍弃uniques
并分配{ {1}}移至新列,如下所示:
labels
或者,如果将import pandas as pd
df = pd.DataFrame({
'ColumnOne': ['ABCD', 'ABCD', 'EFGH', 'IJKL'],
'ColumnTwo': ['red', 'blue', 'green', 'white']
})
# factorize returns (labels, uniques) and you just want labels
df['ColumnThree'] = pd.factorize(df['ColumnOne'])[0]
转换为df['ColumnOne']
dtype,则可以使用此其他文章中的任何答案:
Get mapping of categorical variables in pandas