特定条件下Python数据集的A/B拆分

2024-05-20 17:21:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是将一个9列的数据集划分为两个不同的分层数据集。七列必须分层,另外两列必须以特定方式拆分。你知道吗

我检查了A/B拆分库,但没有找到,所以我只使用了sklearn.model_selection.train_test_split,设置了test_size=0.5,以便两个数据集具有相同的长度。作为y,我传递了必须分层的列。你知道吗

X包含不需要分层拆分的数据。y包含需要分层的数据。你知道吗

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

然后,我将auxya合并以获得一个拆分,将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出现在两个split中,也不能允许一个personID出现在两个split中。因此,我需要设置一个约束,使一个人必须始终处于同一个拆分中;对于一个案例,caseID不能同时处于两个拆分中。你知道吗

例如,如果有三行具有以下值:

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

前两个必须在同一个分割中,因为它们具有相同的CaseID。你知道吗

是否有任何库/函数允许我这样做?你知道吗


Tags: 数据testtruesizeindex分层trainpd
1条回答
网友
1楼 · 发布于 2024-05-20 17:21:15

对于此方法,您需要使用通常称为“拆分-应用-组合”的技术。为此,我们将使用Groupbys。你知道吗

您的第一项任务是将数据分成相关组。你知道吗

df_by_CaseID = df.groupby('CaseID')

在此之后,您将应用分割,您将不得不在这里投入一些工作,因为您将洗牌groupby对象,而不是dataframe。Read here for more on groupby.

然后可以使用pd.dataframe组合每个groupby项。你知道吗

在得到这个之后,一定要记住将这些数据洗牌,因为它将按caseID分组,这可能会对您的模型产生影响,如果您有疑问,请在下面进行评论。也checkout this,的概述解释。你知道吗

相关问题 更多 >