You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

代码说明

  1. 字符串处理:用split(',')分割每行的性别字符串,再通过strip()去除每个性别项的前后空格,避免因空格导致的统计错误(比如female, female会被正确处理为两个female)。
  2. 计数逻辑:Counter会自动统计列表中每个性别的出现次数,get()方法可以指定默认值0,确保即使某行没有male或female也能返回0而不是报错。
  3. 批量生成列:apply方法会逐行处理borrower_genders列,返回的Series会自动展开为male和female两列,直接添加到原DataFrame中。

内容的提问来源于stack exchange,提问作者Michael Gebregzabiher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:35:36