将列添加到Pandas数据框中,随机填充带有百分比分割的值



我想在pandas数据帧上进行测试、训练、有效,但我不想生成新的数据帧。相反,我想在Split = ['train','valid','test']中添加一个名为"Split"的新列。我希望'train''valid''test'分别随机分布在行的64%16%20%中。

我知道scikit learn的train_testrongplit,但我不想要新的框架。所以我可以试试:

from sklearn.model_selection import train_test_split
train, test = train_test_split(df, test_size=0.2)

但我只想要一个列"Split",其中包含train、valid和test的值作为标签。这是为了机器学习的目的,所以我想确保分裂是完全随机的。

有人知道这是怎么可能的吗?

这里有一种方法,使用建议的numpy.random.choice:

import pandas as pd
import numpy as np
# Set up a little example
data = np.ones(shape=(100, 3))
df = pd.DataFrame(data, columns=['x1', 'x2', 'y'])
df['split'] = pd.NA
# Split
split = ['train', 'valid', 'test']
df['split'] = df['split'].apply(lambda x: np.random.choice(split, p=[0.64, 0.16, 0.20]))
# Verify
df['split'].value_counts()

对于一次给定的运行,这产生了

train    64
valid    19
test     17
Name: split, dtype: int64

最新更新