我有一个数据框如下,我需要将它分成训练和测试集,如果我在训练中有一个特定的ID,它不应该在测试集中重复。
Row ID AGE GENDER TIME CODE
0 1 66 M 1 0
1 1 66 M 2 0
2 1 66 M 3 1
3 2 20 F 1 0
4 2 20 F 2 0
5 2 20 F 3 0
6 2 20 F 4 0
7 3 18 F 1 0
8 3 18 F 2 0
9 3 18 F 3 0
10 3 18 F 4 1
训练集中所需的输出应该是这样的
Row ID AGE GENDER TIME CODE
0 1 66 M 1 0
1 1 66 M 2 0
2 1 66 M 3 1
3 2 20 F 1 0
4 2 20 F 2 0
5 2 20 F 3 0
6 2 20 F 4 0
和测试集应该像
Row ID AGE GENDER TIME CODE
0 3 18 F 1 0
1 3 18 F 2 0
2 3 18 F 3 0
3 3 18 F 4 1
怎么可能在pandas python中这样做?
提前致谢
答案 0 :(得分:1)
试试这个,
ids=df['ID'].unique()
t= ids[:int(round(len(ids)*0.60))]
train=df[df['ID'].isin(t)]
test=df[~df['ID'].isin(t)]
输入:
Row ID AGE GENDER TIME CODE
0 0 1 66 M 1 0
1 1 1 66 M 2 0
2 2 1 66 M 3 1
3 3 2 20 F 1 0
4 4 2 20 F 2 0
5 5 2 20 F 3 0
6 6 2 20 F 4 0
7 7 3 18 F 1 0
8 8 3 18 F 2 0
9 9 3 18 F 3 0
10 10 3 18 F 4 1
输出:
火车:
Row ID AGE GENDER TIME CODE flag
0 0 1 66 M 1 0 0
1 1 1 66 M 2 0 0
2 2 1 66 M 3 1 0
3 3 2 20 F 1 0 1
4 4 2 20 F 2 0 1
5 5 2 20 F 3 0 1
6 6 2 20 F 4 0 1
测试:
Row ID AGE GENDER TIME CODE flag
7 7 3 18 F 1 0 2
8 8 3 18 F 2 0 2
9 9 3 18 F 3 0 2
10 10 3 18 F 4 1 2