python - 将 Pandas 数据框拆分为互斥的子集

标签 python pandas random

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

这是我到目前为止所做的工作,我在数据框中添加了一个新列 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,则

for v in range(1,V+1):
    print (v,': ',Data['V'][Data['V']==v].count())

返回:

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

这样我就不会将所有剩余样本都放入最后一个容器中。

最佳答案

定义你的函数

def Vfold_Subsets(Data, V):
    return Data.assign(
        V=np.random.permutation(np.arange(len(Data))) % V)

关于python - 将 Pandas 数据框拆分为互斥的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42867080/

相关文章:

java - 无法在 jython 中安装请求

python - Pandas /matplotlib : change tick label format (force plain not scientific)

c - 如何返回字符串数组?

python - 阿普塔纳工作室 3 : How to apply themes to python editor

python - 神经网络反向传播未完全训练

python - Pandas 将具有多个值的行数据合并到列的 Python 列表

php - 用php打乱从mysql中提取的名字顺序

java - 在绘制方法中设置随机颜色

python - 对于整个时间间隔内有效的数据,我应该在 Pandas 中使用什么表示形式?

python - 检查 Pandas 列列表中的项目是否包含另一列中的值