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

如何基于另一dataframe的取值将pandas dataframe拆分为6个新dataframe

实现方案

首先对齐两个DataFrame的行顺序,避免因索引不匹配导致分类错误:

import pandas as pd

# 截取trainX前7351行与trainY长度对齐,重置索引保证行严格对应
trainX_align = trainX.iloc[:len(trainY)].reset_index(drop=True)
trainY_align = trainY.reset_index(drop=True)

# 合并标签列到特征表中,方便后续筛选
train_merged = pd.concat(
    [trainX_align, trainY_align.rename(columns={trainY.columns[0]: "label"})],
    axis=1
)

方式1:直接生成6个独立DataFrame

直接得到你需要的class1到class6六个结果表,每个表仅保留对应标签的trainX原始特征列:

class1 = train_merged[train_merged["label"] == 1].drop("label", axis=1).reset_index(drop=True)
class2 = train_merged[train_merged["label"] == 2].drop("label", axis=1).reset_index(drop=True)
class3 = train_merged[train_merged["label"] == 3].drop("label", axis=1).reset_index(drop=True)
class4 = train_merged[train_merged["label"] == 4].drop("label", axis=1).reset_index(drop=True)
class5 = train_merged[train_merged["label"] == 5].drop("label", axis=1).reset_index(drop=True)
class6 = train_merged[train_merged["label"] == 6].drop("label", axis=1).reset_index(drop=True)

方式2:存入字典(更适合批量操作)

不需要定义6个独立变量,后续通过class_dfs[标签值]即可调用对应类别的数据:

class_dfs = {}
for label in range(1, 7):
    class_dfs[label] = train_merged[train_merged["label"] == label].drop("label", axis=1).reset_index(drop=True)

不推荐使用iterrows()遍历实现:该方法遍历效率极低,且容易出现索引错位的问题。上述方案使用pandas向量化布尔索引实现,运行效率更高,也不会出现语法错误。
如果你确认trainX和trainY的行已经严格按顺序对应,也可以跳过合并步骤,直接通过trainX.iloc[:len(trainY)][trainY.iloc[:,0]==标签值]筛选对应的行。

内容的提问来源于stack exchange,提问作者Mario Boot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:54:02