Python-在数据框中选择2列并对其进行分类

时间:2018-08-21 16:00:30

标签: python-3.x dataframe jupyter-notebook

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

我有一个包含很多信息的数据框,其中包括性别和年龄。我想介绍每种性别(男性和女性)的行数,并将其分类为儿童(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'])))

结果:

第36次男性化犯罪的量化证明

32位女性性犯罪嫌疑人

第22届男性青少年量刑》

第23届女权行为少年报

第519期成年男子的性侵行为

第259条女性成年男子身份标记

1 个答案:

答案 0 :(得分:0)

我将使用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