我的目标是将一个由9列组成的数据集分成两个不同的分层数据集。七列必须分层,另外两列必须以特定方式分开。
我检查了A/B拆分库,但没有找到,所以我只使用
sklearn.model_selection.train_test_split
,设置
test_size=0.5
以便使两个数据集具有相同的长度。作为
y
,我通过了必须分层的列。
X
包含的数据不需要分层拆分。
是的
包含需要分层的数据。
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 |
+-----------------------------------+------------+
前两个必须在同一个分裂,因为他们有相同的案件ID。
是否有任何库/函数允许我这样做?