对列中70%、20%和10%的唯一值进行采样



我在熊猫df中有如下数据

d = {'col1': [1,1,1,2,2,2,3,3,3], 'col2':[1,2,3,1,2,3,1,2,3]}
df = pd.DataFrame(data=d)

我想对col1的唯一值进行70%/20%/10%的拆分(例如,所有值1和2,但不是3,是的,我知道在这个例子中是66%(,并将每个拆分放在自己的新数据帧中。当我使用df.sample(frac=.7(之类的东西时,我得到了所有行的70%,但得到了col1中可能值的混合。

我知道我可以做一个col1的唯一性,找到其中70%的值,将这70%复制到一个新的数据帧中,从我的唯一值列表中删除这70%,将我的70%加入到整个数据集,然后对这20%和10%再次进行整个练习,但这似乎效率很低。是否有一些内置功能可以像这样拆分分组数据帧?

我按照以下解决了这个问题

train_df = df.groupby("col1").sample(frac=.7)
remain = df[~df.col1.isin(train_df)]
test_df = df.groupby("col1").sample(frac=.66)
validation_df = df[~df.col1.isin(test_df)]

最新更新