pandas - 如何使用列中不同元素的值创建另一列?
问题描述
我有一个像这样的 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 元素,我该怎么做?
解决方案
我想你正在寻找pd.factorize()
. 来自文档:
https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.factorize.html
将 a 传递Series
给pd.factorize()
返回两个数组:labels
和uniques
. 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']
为categorical
dtype,您可以使用其他帖子中的任何答案:
Get mapping of categorical variables in pandas
推荐阅读
- android - 如何更改 Android Project 中的所有文本文件?
- python - ET 中的评论:不仅仅是评论标签
- python - Python rarfile 包:BadRarFile
- arrays - Dictionary(grouping: , by: ) - 作为变量传递的谓词闭包
- python - 基于值的彩色条形图
- symfony - symfony liip 想象水印不工作
- mongodb - 使用 insertMany 命令恢复 bson 文档
- javascript - 是否可以使用 sequelize 在迁移中更新 postgresql 数据库中的现有数据
- vscode-settings - 如何隐藏在 Vs-code 中编译“c”或“c++”语言代码后生成的没有扩展名的文件
- c# - sql select语句在asp.net中返回空引用错误