我正在修改数据集中的一个列,该列包含一组人的性别的逗号分隔列表。所以一个条目可以是“男性,男性”或者“女性,女性,女性,男性”或者仅仅是“女性”。我想对数据进行处理,使其分类为“所有男性”、“所有女性”、“大多数男性”、“大多数女性”,以便以后使用sci工具包学习。
然而,我对数据科学还不太熟悉,除了将每个字符串分成“男性”和“女性”的子字符串,计算出现次数,然后根据结果更新条目之外,我想不出其他方法来实现这一点。我的数据集有大约60万个样本,所以暴力似乎不是一个好主意。有没有更好的方法使用Python、Numpy和/或Pandas来实现这一点?

最佳答案

如果我理解正确的话-你正试图从你的专栏“genders”中创建一个新的分类特性。
该列可能包含4个值-所有男性、所有女性、大多数男性和大多数女性。
(我假设大多数男性是指男性数量>女性数量)

def categorical_gender(genders):
    genders_split = genders.split(",")
    male_count = genders_split.count("male")
    female_count = genders_split.count("female")
    if male_count == len(genders_split):
        return "all male"
    if female_count == len(genders_split):
        return "all female"
    if male_count>female_count:
        return "majority male"
    if male_count<female_count:
        return "majority female"
    else:
        return "equal males and females"

现在将此函数应用于genders列上的数据帧。
df["categorical_gender"] = df.genders.apply(categorical_gender)

关于速度的问题。你应该没事的。Pandas可以非常有效地处理6000k行的字符串操作。但是,您可以使用dask来多处理上述应用操作。尽管这对这个案子来说是个过分的打击。

07-25 21:40
查看更多