首页 > 解决方案 > Python - 在数据框中选择 2 列并对它们进行分类

问题描述

我是编程界的新手,我正在做一些研究以获取数据科学领域的知识。

我有一个包含很多信息的数据框,其中包括性别和年龄。我想带上每个性别(男性和女性)的行数,并将它们分类为儿童(0 至> 12 岁)、年轻(12 至> 18 岁)和成人(18 岁以上)。结果将是这样的:

儿童女性:x数量

年轻女性:y 数量

成年女性:z量

儿童男性:n 数量

年轻男性:k量

成年男性:j量

我迷失了不知道我是否已经正确开始......我已经创建了另一个包含我需要的两列的数据框。

df2 = df[["Sex", "Age"]].copy()

从这里有点卡住

编辑(对代码中的一些术语感到抱歉,它们是葡萄牙语,但代码是可以理解的

我可以解决问题。这是我从一开始所做的:

仅使用我需要的信息创建新的 DF:

df2 = df[["Sex", "Age"]].copy()

创建一个函数来对值进行分类:

def definition(age):
    if age >= 18:
        return 'Adulto'
    elif age >= 12:
        return 'Jovem'
    return 'Criança'

将新列添加到 DF

df2['Classification'] = df2['Age'].map(definition)

和打印

print("A quantidade de crianças do sexo masculino é de {}".format(len(df2.loc[df2['Classification'] == 'Criança'].loc[df2['Sex'] == 'male'])))
print("A quantidade de crianças do sexo feminino é de {}".format(len(df2.loc[df2['Classification'] == 'Criança'].loc[df2['Sex'] == 'female'])))
print("A quantidade de jovens do sexo masculino é de {}".format(len(df2.loc[df2['Classification'] == 'Jovem'].loc[df2['Sex'] == 'male'])))
print("A quantidade de jovens do sexo feminino é de {}".format(len(df2.loc[df2['Classification'] == 'Jovem'].loc[df2['Sex'] == 'female'])))
print("A quantidade de adultos do sexo masculino é de {}".format(len(df2.loc[df2['Classification'] == 'Adulto'].loc[df2['Sex'] == 'male'])))
print("A quantidade de adultos do sexo feminino é de {}".format(len(df2.loc[df2['Classification'] == 'Adulto'].loc[df2['Sex'] == 'female'])))

结果:

A quantidade de crianças do sexo masculino é de 36

A quantidade de crianças do sexo feminino é de 32

A quantidade de jovens do sexo masculino é de 22

A quantidade de jovens do sexo feminino é de 23

A quantidade de adultos do sexo masculino é de 519

A quantidade de adultos do sexo feminino é de 259

标签: python-3.xdataframejupyter-notebook

解决方案


我会使用 pandas.cut 创建年龄类,然后按两列分组并检查大小。让我知道我是否可以详细说明。

bins = [1, 5, 10, 15]

group_names = ['Children', 'Young', 'Adult']

age_groups = pandas.cut(df2.Age, bins, labels=group_names)

df2['Age Groups'] = age_groups.tolist()

df2.groupby(['Gender','Age Groups']).size()

我对 pandas.cut 细微差别的熟悉有点生疏,所以上面的垃圾箱并不是你想要的。我建议在笔记本中使用数据以将它们放在您想要的位置。这里的文档很有帮助https://pandas.pydata.org/pandas-docs/stable/generated/pandas.cut.html


推荐阅读