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/