python - 如何使用 N 行批次将数据分成两组?
问题描述
我需要df
使用 2 个批次将我的数据集随机分成两组(比例 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
应该是熊猫数据框。
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,:]
解决方案
这是一个基于随机整数做你想做的事情然后取 30% 的函数:
def split_data(df, batchsize):
x = np.random.randint(0, len(df))
idx = round(len(df) * batchsize)
# so we don't get out of the bounds of our index
if x + idx > len(df):
x = x - idx
batch1 = df.loc[np.arange(x, x+idx)]
batch2 = df.loc[~df.index.isin(batch1.index)]
return batch1, batch2
df1, df2 = split_data(df, 0.3)
print(df1, '\n')
print(df2)
col1 col2 col3
4 1 0.9 10
5 3 0.4 7
col1 col2 col3
0 1 0.5 10
1 1 0.3 11
2 5 1.4 1
3 3 1.5 2
6 1 1.2 9
7 3 0.1 11
推荐阅读
- jquery - 谷歌分析事件触发,但使用 gtag.js 在电子商务中没有数据显示
- flutter - 颤振块没有第二次添加事件
- javascript - 无法将对象推入数组,因为它是未定义的 Javascript
- c# - 更改扩展窗口的窗口标题字体
- java - Lucene 建议:使用 CompletionQuery 时出现“不是 SuggestField”异常
- javascript - Redux 从本地文件加载初始数据,然后从状态加载
- javascript - 从元素中获取画布对象
- javascript - 在状态更改*和*按钮单击时调用函数
- c# - Visual Studio 错误-XLS0509 - 如何解决?- XAML - 微软教程
- centos8 - 在 CentOS8 的 gdm 启动期间启动 Synergy (greeter)