Python 如何在数据帧中随机删除行,直到列中的值数相等为止?
我有一个带有两列的数据框Python 如何在数据帧中随机删除行,直到列中的值数相等为止?,python,pandas,numpy,scikit-learn,Python,Pandas,Numpy,Scikit Learn,我有一个带有两列的数据框pd,X和y 在pd[y]中,我有从1到10的整数。但是,它们有不同的频率: df[y].value_counts() 10 6645 9 6213 8 5789 7 4643 6 2532 5 1839 4 1596 3 878 2 815 1 642 我想减少数据帧,以便每个标签的出现次数相等。由于我希望每个标签的数量相等,因此最小频率为642。因此,我只想在我的数据框中随机地保
pd
,X
和y
在pd[y]
中,我有从1
到10
的整数。但是,它们有不同的频率:
df[y].value_counts()
10 6645
9 6213
8 5789
7 4643
6 2532
5 1839
4 1596
3 878
2 815
1 642
我想减少数据帧,以便每个标签的出现次数相等。由于我希望每个标签的数量相等,因此最小频率为642
。因此,我只想在我的数据框中随机地保留每个类标签的642
采样行,以便我的新数据框中每个类标签都有642
我认为分层可能会有所帮助,但是分层只会保持每个标签的相同百分比,但我希望我所有的标签都具有相同的频率
作为数据帧的示例:
df = pd.DataFrame()
df['y'] = sum([[10]*6645, [9]* 6213,[8]* 5789, [7]*4643,[6]* 2532, [5]*1839,[4]* 1596,[3]* 878, [2]*815, [1]* 642],[])
df['X'] = [random.choice(list('abcdef')) for i in range(len(df))]
与-
输出
y
y
1 68 1
8 1
82 1
17 1
99 1
31 1
6 1
2 55 2
15 2
81 2
22 2
46 2
13 2
58 2
3 2 3
30 3
84 3
61 3
78 3
24 3
98 3
4 51 4
86 4
52 4
10 4
42 4
80 4
53 4
5 16 5
87 5
... ..
6 26 6
18 6
7 56 7
4 7
60 7
65 7
85 7
37 7
70 7
8 93 8
41 8
28 8
20 8
33 8
64 8
62 8
9 73 9
79 9
9 9
40 9
29 9
57 9
7 9
10 96 10
67 10
47 10
54 10
97 10
71 10
94 10
[70 rows x 1 columns]
你也可以添加数据框,这样我们就不必创建数据框了。预期产量也会有所提高understanding@anky_91更新
y
y
1 68 1
8 1
82 1
17 1
99 1
31 1
6 1
2 55 2
15 2
81 2
22 2
46 2
13 2
58 2
3 2 3
30 3
84 3
61 3
78 3
24 3
98 3
4 51 4
86 4
52 4
10 4
42 4
80 4
53 4
5 16 5
87 5
... ..
6 26 6
18 6
7 56 7
4 7
60 7
65 7
85 7
37 7
70 7
8 93 8
41 8
28 8
20 8
33 8
64 8
62 8
9 73 9
79 9
9 9
40 9
29 9
57 9
7 9
10 96 10
67 10
47 10
54 10
97 10
71 10
94 10
[70 rows x 1 columns]