社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

luis.galdo • 5 年前 • 1611 次点击  

我的目标是将一个由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。

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/50780
 
1611 次点击  
文章 [ 1 ]  |  最新文章 5 年前
anand_v.singh
Reply   •   1 楼
anand_v.singh    6 年前

对于这种方法,您需要使用通常称为split-apply-combine的技术。为此,我们将使用Groupbys。

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

df_by_CaseID = df.groupby('CaseID')

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

然后可以使用 pd.dataframe .

在得到这些之后,请记住重新整理这些数据,因为它们将按caseID分组,如果您有疑问,请在下面进行评论。也 checkout this, 以获取概述解释。