python - 我想将数据帧分成带有范围的训练集和测试集

标签 python pandas machine-learning

import pandas as pd 
import numpy as np
data=[]
columns = ['A', 'B', 'C']
data = [[0, 10, 5], [0, 12, 5], [2, 34, 13], [2, 3, 13], [4, 5, 8], [2, 4, 8], [1, 2, 4], [1, 3, 4], [3, 8, 12],[4,10,12],[6,7,12]]

df = pd.DataFrame(data, columns=columns)
print(df)

#     A   B   C
# 0   0  10   5
# 1   0  12   5
# 2   2  34  13
# 3   2   3  13
# 4   4   5   8
# 5   2   4   8
# 6   1   2   4
# 7   1   3   4
# 8   3   8  12
# 9   4  10  12
# 10  6   7  12

现在我想创建两个数据框 df_train 和 df_test,这样“C”列的两个数字都不在同一组中。例如。在 C 列中,元素 5 应该在训练集中或测试集中。因此,行 [0, 10, 5]、[0, 12, 5]、[2, 34, 13] 将进入训练集或测试集,但不能同时使用两者。C 列元素的选择应随机进行。

我被困在这一步,无法继续。

最佳答案

首先 sample df ,然后 groupby C 获取与同一组内的重复值不同的 cumcount

s=df.sample(len(df)).groupby('C').cumcount()
s
Out[481]: 
5     0
7     0
2     0
1     0
0     1
6     1
10    0
4     1
3     1
8     1
9     2
dtype: int64
test=df.loc[s[s==1].index]
train=df.loc[s[s==0].index]
test
Out[483]: 
   A   B   C
0  0  10   5
6  1   2   4
4  4   5   8
3  2   3  13
8  3   8  12
train
Out[484]: 
    A   B   C
5   2   4   8
7   1   3   4
2   2  34  13
1   0  12   5
10  6   7  12

关于python - 我想将数据帧分成带有范围的训练集和测试集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51599829/

相关文章:

python - 如何将未压缩的视频从 FFMPEG 子进程传输到 python?

python - 在 plotly 中绘制分组的 pandas 数据

python - 有效地从字符串列中删除多个短语

image - 卷积神经网络图像输入大小

python - 如何在 Tensorflow 运行时查看或保存一个张量?

python - 高召回率的最佳 SVM 参数

python - 如何根据第一列的内容拆分一个巨大的 csv 文件?

python - 使用条件循环遍历 JSON 对象

python - 使用python将mySql查询结果转换为json

python - 以 d-m 的形式获取一年(任何一年)中的天数列表