首页 > 解决方案 > 如何使用列中不同元素的值创建另一列?

问题描述

我有一个像这样的 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 元素,我该怎么做?

标签: pandas

解决方案


我想你正在寻找pd.factorize(). 来自文档: https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.factorize.html

将 a 传递Seriespd.factorize()返回两个数组:labelsuniques. labels是您的类别的数字编码,并且uniques是您刚刚传入的唯一值的数组Series。因此您可以丢弃uniques并分配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']categoricaldtype,您可以使用其他帖子中的任何答案: Get mapping of categorical variables in pandas


推荐阅读