Jupyter Notebook中DataFrame每行性别元素的男女数量统计求助
问题:统计DataFrame每行中male和female的数量
我的DataFrame的borrower_genders列中,每行数据是单个性别(如female)或多个用逗号分隔的性别(如female,female、male,female),需要给每行新增male和female两列,分别记录该行中对应性别的数量。
数据示例
0 female 1 female, female 2 female ... 646832 female Name: borrower_genders, Length: 646833, dtype: object
尝试过的代码
代码1
import collections for female in df_fundinv['borrower_genders'][0]: collections.counter() type(liste) collections.Counter(liste)
代码2
gender.values männlich={} for element in gender.values: try: 'element'!= 'male' except: männlich.append(dict(zip(male, counts))) männlich
预期结果
每行对应新增male、female列,记录该行的男女数量,比如包含male的行对应记录male的数量,多个female的行记录对应计数。
解决方案
可以用pandas的apply方法配合collections.Counter高效实现需求,代码如下:
import pandas as pd from collections import Counter # 定义处理单行性别字符串的函数 def count_genders(gender_str): # 分割字符串并去除每个性别项的前后空格 gender_list = [g.strip() for g in gender_str.split(',')] # 统计各性别的数量 gender_count = Counter(gender_list) # 返回male和female的计数,无对应性别则返回0 return pd.Series( [gender_count.get('male', 0), gender_count.get('female', 0)], index=['male', 'female'] ) # 将函数应用到目标列,直接生成新的计数列 df_fundinv[['male', 'female']] = df_fundinv['borrower_genders'].apply(count_genders)
代码说明
- 字符串处理:用
split(',')分割每行的性别字符串,再通过strip()去除每个性别项的前后空格,避免因空格导致的统计错误(比如female, female会被正确处理为两个female)。 - 计数逻辑:
Counter会自动统计列表中每个性别的出现次数,get()方法可以指定默认值0,确保即使某行没有male或female也能返回0而不是报错。 - 批量生成列:
apply方法会逐行处理borrower_genders列,返回的Series会自动展开为male和female两列,直接添加到原DataFrame中。
内容的提问来源于stack exchange,提问作者Michael Gebregzabiher
相关产品推荐
相关产品推荐

