Pandas 如何使用列中不同元素的值创建另一列?

Pandas 如何使用列中不同元素的值创建另一列?,pandas,Pandas,我有一个像这样的DataFrame对象 ColumnOne | ColumnTwo ABCD | red ABCD | blue EFGH | green IJKL | white ColumnOne | ColumnTwo | ColumnThree ABCD | red | 0 ABCD | blue | 0 EFGH | green | 1 IJKL | wh

我有一个像这样的DataFrame对象

ColumnOne |  ColumnTwo
ABCD      |  red
ABCD      |  blue
EFGH      |  green
IJKL      |  white
ColumnOne |  ColumnTwo | ColumnThree
ABCD      |  red       | 0
ABCD      |  blue      | 0
EFGH      |  green     | 1
IJKL      |  white     | 2
我想要一个像这样的数据帧对象

ColumnOne |  ColumnTwo
ABCD      |  red
ABCD      |  blue
EFGH      |  green
IJKL      |  white
ColumnOne |  ColumnTwo | ColumnThree
ABCD      |  red       | 0
ABCD      |  blue      | 0
EFGH      |  green     | 1
IJKL      |  white     | 2

基于ColumnOne元素,我该怎么做?

我想您正在寻找
pd.factorize()
。从文档中:

序列
传递给
pd.factorize()
将返回两个数组:
标签
唯一性
labels
是您类别的数字编码,
uniques
是您刚刚传入的
系列中唯一值的数组。因此,您可以放弃
uniques
,只需将
标签
分配给一个新列,如下所示:

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']
转换为
categorical
dtype,您可以使用其他帖子中的任何答案:

第三列数字背后的逻辑是什么?