我的目标是将一个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)
然后,我将aux
和ya
合并以获得一个拆分,将aux1
和yb
合并以获得另一个拆分。你知道吗
a = pd.merge(aux, ya, left_index=True, right_index=True)
b = pd.merge(aux1, yb, left_index=True, right_index=True)
它起作用了,但是分层列中有两个是caseID
和personID
。可以有多行具有相同的caseID,也可以有多行具有相同的personID。你知道吗
我不能允许一个caseID出现在两个split中,也不能允许一个personID出现在两个split中。因此,我需要设置一个约束,使一个人必须始终处于同一个拆分中;对于一个案例,caseID不能同时处于两个拆分中。你知道吗
例如,如果有三行具有以下值:
+-----------------------------------+------------+
| CaseID | PersonID |
+-----------------------------------+------------+
| 1 | 2 |
| 1 | 3 |
| 2 | 5 |
+-----------------------------------+------------+
前两个必须在同一个分割中,因为它们具有相同的CaseID。你知道吗
是否有任何库/函数允许我这样做?你知道吗
对于此方法,您需要使用通常称为“拆分-应用-组合”的技术。为此,我们将使用Groupbys。你知道吗
您的第一项任务是将数据分成相关组。你知道吗
在此之后,您将应用分割,您将不得不在这里投入一些工作,因为您将洗牌groupby对象,而不是dataframe。Read here for more on groupby.
然后可以使用
pd.dataframe
组合每个groupby项。你知道吗在得到这个之后,一定要记住将这些数据洗牌,因为它将按caseID分组,这可能会对您的模型产生影响,如果您有疑问,请在下面进行评论。也checkout this,的概述解释。你知道吗
相关问题 更多 >
编程相关推荐