Python中的数据集的A / B分割与特定的条件

问题描述 投票:0回答:1

我的目标是9列的数据集分成两个不同的分层数据集。七列必须分层和其他两个必须以特定的方式进行分割。

我检查了A / B分裂库,但我没有找到一个,所以我只是用sklearn.model_selection.train_test_split,设置test_size=0.5以具有相同长度的两个数据集。作为y,我经过了必须分层列。

Xcontains数据并不需要在一个分层的方式进行分割。 y包含需要进行分层的数据。

aux, aux1, ya, yb = train_test_split(X,y,test_size=0.5)

然后,我合并auxand ya获得一个分裂和aux1yb获得另一个。

a = pd.merge(aux, ya, left_index=True, right_index=True) b = pd.merge(aux1, yb, left_index=True, right_index=True)

它的工作,但有两个分层列是caseIDpersonID。可以有多个行具有相同caseID,以及与同PERSONID几行。

我不能让一个caseID存在于两个分裂,无论是我可以允许PERSONID存在于两者。所以,我需要设置的方式,一个人必须始终在同一个分裂的约束;和的情况下一样,一个caseID不能在这两个分裂。

举例来说,如果我有三个行具有以下值:

+-----------------------------------+------------+
|               CaseID              |  PersonID  |
+-----------------------------------+------------+
| 1                                 |     2      |
| 1                                 |     3      |
| 2                                 |     5      |
+-----------------------------------+------------+

前两个必须在同一分裂,因为它们具有相同的CaseID。

是否有任何库/功能,让我做到这一点?

python machine-learning
1个回答
0
投票

对于这种方法,你需要使用通常被称为分裂应用,结合技术。为此,我们将使用Groupbys。

你的第一个任务是将数据分割成相关组。

df_by_CaseID = df.groupby('CaseID')

在此之后,你将你的应用拆分,你将不得不把一些工作,这里你会被洗牌GROUPBY对象,而不是数据帧。 Read here for more on groupby.

然后你就可以使用pd.dataframe结合每个GROUPBY项目。

获得此之后,千万记得要洗牌这个数据,因为它会通过caseID分组,并可能对你的模型的后果,如果你有和疑虑,下面发表评论。也checkout this,的概述说明。

© www.soinside.com 2019 - 2024. All rights reserved.