我创建了以下熊猫数据框:
ds = {'col1':[1.0,2.1,2.2,3.1,41,5.2,5.0,6.1,7.1,10]}
df = pd.DataFrame(data=ds)
数据框如下所示:
print(df)
col1
0 1.0
1 2.1
2 2.2
3 3.1
4 41.0
5 5.2
6 5.0
7 6.1
8 7.1
9 10.0
我需要创建一个随机的 80% / 20% 的数据集分区,并且还需要创建一个字段(称为buildFlag
),以显示记录是属于 80% 分区(buildFlag = 1
)还是属于 20% 分区(buildFlag = 0
)。
例如,生成的数据框将如下所示:
col1 buildFlag
0 1.0 1
1 2.1 1
2 2.2 1
3 3.1 0
4 41.0 1
5 5.2 0
6 5.0 1
7 6.1 1
8 7.1 1
9 10.0 1
这些buildFlag
值是随机分配的。
有人能帮帮我吗?
解决方案(PANDAS + NUMPY)
一个可能的解决方案是:
首先,采用
np.random.choice
随机方式选择 80% 的df
指标,无需重复。然后该
df.index.isin
函数检查每一行的索引以查看是否选择了该行。最后,为选定索引的列
np.where
分配 1Flag
,为其他索引分配 0。解决方案(PANDAS + SKLEARN)
或者,我们可以使用
scikit-learn
的train_test_split
函数:首先,它
df
按照 的规定将 的指标随机分成两组:80%用于训练,20%用于测试test_size=0.2
。使用 提取训练索引
[0]
。df.index.isin
然后该方法检查哪些索引属于训练集,并生成一个布尔数组。最后,使用 将这个布尔数组转换为整数(
1
对于True
和0
对于False
).astype(int)
。输出:
使用
sample
和reindex
:或者,如果您的索引是唯一的:
输出:
您也可以使用
shuffle
fromrandom
,例如,输出如下