繁体   English   中英

根据另一列的值在熊猫中创建新列

[英]Create new column in pandas based on value of another column

我有一些关于不同个体性别的数据集。 假设数据集如下所示:

Male
Female
Male and Female
Male
Male
Female
Trans
Unknown
Male and Female

有的自称为男性,有的自称为女性,有的自称为男性和女性。

现在,我想要做的是在 Pandas 中创建一个新列,它映射

Males to 1, 
Females to 2,
Others to 3

我写了一些代码

def gender(x):
    if x.str.contains("Male")
        return 1
    elif x.str.contains("Female")
        return 2
    elif return 3

df["Gender Values"] = df["Gender"].apply(gender)

但是我收到了函数不包含任何属性包含的错误。 我尝试删除 str:

x.contains("Male")

我遇到了同样的错误

有一个更好的方法吗?

您可以使用:

def gender(x):
    if "Female" in x and "Male" in x:
        return 3
    elif "Male" in x:
        return 1
    elif "Female" in x:
        return 2
    else: return 4

df["Gender Values"] = df["Gender"].apply(gender)

print (df)
            Gender  Gender Values
0             Male              1
1           Female              2
2  Male and Female              3
3             Male              1
4             Male              1
5           Female              2
6            Trans              4
7          Unknown              4
8  Male and Female              3

创建一个映射函数,并使用它来映射值。

def map_identity(identity):
    if gender.lower() == 'male':
        return 1
    elif gender.lower() == 'female':
        return 2
    else: 
        return 3

df["B"] = df["A"].map(map_identity)

如果没有具体要求按顺序分别使用 1、2、3 到男性、女性和其他,您可以尝试使用 Scikit-Learn 的 LabelEncoder。 它将随机为该列中的每个唯一类别分配一个唯一编号。

from sklearn import preprocessing
encoder = preprocessing.LabelEncoder()
encoder.fit(df["gender"])

有关详细信息,您可以查看标签编码器文档。

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM