大熊猫根据sessionid随机分割/选择数据集

时间:2019-10-22 14:54:47

标签: pandas pandas-groupby

我想将我的数据集随机拆分为训练和测试如下子集:

        x      in            session_id    page_id
0     0.0     1.0     trn-04a23351-283d       paul
1    -1.0     2.0     trn-04a23351-283d       paul2
2    -1.0     3.0     trn-04a23351-283d       paul3
3    -1.0     4.0     trn-04a23351-283d       paul4
4    -1.0     1.0      blz-412313we-333       paul
5    -1.0     2.0      blz-412313we-333       paul
27    0.0     1.0               adasdfs      sarah
28   -1.0     2.0               adasdfs      sarah
29    0.0     3.0               adasdfs      sarah

基于session_id列。我想将会话随机分为两个数据集。然后,进行这些会话的所有交互。天真的方法是:

df['is_train'] = df.groupby('session_id').session_id.transform(lambda x: np.random.ranf() > ratio)

但是使用python lambda会降低性能。

1 个答案:

答案 0 :(得分:1)

我认为您的方法存在的问题是您使用np.random.ranf并在有组的情况下进行了多次比较,但这并不是很有效。您可以考虑将map的session_id列与根据该列的unique值和np.random.ranf在session_id中具有唯一值的大小nunique创建的序列进行比较,并与整个系列的比率:

df['is_train'] = df.session_id.map(pd.Series( np.random.ranf(df.session_id.nunique()),
                                              index=df.session_id.unique())) > ratio

应该更快。