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

如何按性别拆分DataFrame为两个独立的数据框?

按性别拆分DataFrame的解决方案

最优方法:布尔索引(推荐)

直接利用pandas的布尔索引过滤行,这是最简洁高效的方式:

# 提取所有性别为Male的行,生成新DataFrame
a2 = a1[a1['Gender'] == 'Male']
# 提取所有性别为Female的行,生成新DataFrame
a3 = a1[a1['Gender'] == 'Female']

这种方法不需要循环,完全利用pandas的向量化操作,性能远优于循环,且代码易读。

循环方式(不推荐,但解决你的问题)

如果一定要用循环实现,需要先初始化空DataFrame,每次将单行数据转为DataFrame后用concat添加(避免覆盖或报错):

import pandas as pd

# 初始化与原DataFrame列名一致的空数据框
a2 = pd.DataFrame(columns=a1.columns)
a3 = pd.DataFrame(columns=a1.columns)

# 遍历原DataFrame的每一行
for _, row in a1.iterrows():
    if row['Gender'] == 'Male':
        # 将单行Series转为DataFrame(转置后是单行),再合并
        a2 = pd.concat([a2, row.to_frame().T], ignore_index=True)
    else:
        a3 = pd.concat([a3, row.to_frame().T], ignore_index=True)

你之前代码的问题分析

  1. 第一个代码报错原因:a1.iloc[i]返回的是Series对象,而merge()是DataFrame的方法,Series没有这个属性,所以报错。merge用于合并两个结构匹配的DataFrame,不是用来逐行添加数据的。
  2. 第二个代码覆盖数据原因:每次循环都直接把a2/a3赋值为当前行的Series,之前存储的数据会被覆盖,最终只保留最后一行符合条件的数据。
  3. concat无效的可能原因:你可能直接拼接了Series,而没有先将其转为单行DataFrame,导致结构不匹配。

内容的提问来源于stack exchange,提问作者akhilesh mudliar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 11:12:42