【发布时间】:2020-06-06 21:30:49
【问题描述】:
我需要使用 2 个批次将我的数据集 df 随机分成两组(比例 70:30)。通过“批次”,我的意思是 2 个(批次大小)连续行应该始终属于同一个集合.
col1 col2 col3
1 0.5 10
1 0.3 11
5 1.4 1
3 1.5 2
1 0.9 10
3 0.4 7
1 1.2 9
3 0.1 11
示例结果(由于随机性,输出可能会有所不同,但这只是一个示例):
set1
col1 col2 col3
1 0.5 10
1 0.3 11
1 0.9 10
3 0.4 7
1 1.2 9
3 0.1 11
set2
5 1.4 1
3 1.5 2
我知道如何使用 1 个批次随机拆分数据:
import numpy as np
msk = np.random.rand(len(df)) < 0.7
set1 = df[msk]
set2 = df[~msk]
但是,不确定如何引入灵活批处理。
谢谢。
更新:
这是我目前拥有的,但最后一行代码失败。 set1 和 set2 应该是 pandas 数据帧。
n = 3
df_batches = [df[i:i+n] for i in range(0, df.shape[0],n)]
set1_idx = np.random.randint(len(df_batches), size=int(0.7*len(df_batches)))
set2_idx = np.random.randint(len(df_batches), size=int(0.3*len(df_batches)))
set1, set2 = df_batches[set1_idx,:], df_batches[set2_idx,:]
【问题讨论】:
-
您可以使用
Series.shift()或DataFrame.shift()。见:stackoverflow.com/questions/52711358/…、stackoverflow.com/questions/51443725/… -
@AMC:谢谢。我需要一个允许更改批量大小的灵活解决方案。
-
嗯,数据本身有什么东西决定了批次的数量吗?
-
@AMC:不,没有什么可以确定这一点。
-
啊,太糟糕了。
标签: python python-3.x pandas