将pandas数据帧拆分为互斥的子集

2024-05-13 08:31:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用回归树分析包含在熊猫数据框中的数据。为了进行V-fold交叉验证,我需要将数据分成V个随机的、互斥的子集

到目前为止,我在dataframe中添加了一个新的列V=10,以表示每个样本是哪个子集的成员:

def Vfold_Subsets(Data,V):
    subs = Data
    Data['V'] = V
    N = Data.shape[0]
    n = N//V
    for v in range(1,V):
        sample = subs.sample(n = n)
        Data['V'][Data.index.isin(sample.index)] = v
        subs.drop(sample.index)
    return Data 

这个方法很管用,但我觉得还有更好的方法吗?这种方法的缺点是如果N=108,则

^{pr2}$

退货:

1 :  10
2 :  10
3 :  10
4 :  10
5 :  10
6 :  10
7 :  10
8 :  10
9 :  10
10 :  18

我想如果我能取得这样的成绩会更好

1 :  10
2 :  11
3 :  11
4 :  11
5 :  11
6 :  11
7 :  11
8 :  11
9 :  10
10 :  10

这样我就不会把剩下的样品都塞进最后一个箱子里了。在


Tags: 数据sample方法dataframedataindexdef成员