我正在研究一个训练良好的文本分类问题,但我的类别非常不平衡,阻碍了结果。最大的 2 个类别比最小的类别大 80 倍以上,因此对这两个类别的分类数量不公平。我需要选择 n
每个类别的行(任意大)。我的数据集非常大(10m 行,1k 个唯一类别)。
假设数据框是:
data = {
'category':['2','2','2','2','4','4','4','4','4','4','6','6','6'],
'text':['t1','t2','t3','t4','t5','t6','t7','t8','t9','t10','t11','t12','t13']
}
df = pd.DataFrame(data)
我如何选择
n
每个类别的随机行?我试图找到某种方法来使用
np.random.choice
选择 n
随机行,但我找不到一种方法来抓取该索引以逐个索引。n = 3
的理想输出会是这样的:>>> df.head(9)
category text
0 2 t3
1 6 t11
2 6 t13
3 4 t6
4 2 t1
5 4 t9
6 4 t8
7 2 t4
8 6 t12
最佳答案
您可以使用 sample
和 groupby().head()
:
df.sample(frac=1).groupby('category').head(3)
输出:
category text
4 4 t5
12 6 t13
1 2 t2
8 4 t9
9 4 t10
3 2 t4
10 6 t11
0 2 t1
11 6 t12
关于python - Pandas 数据框,根据唯一值的数量选择 n 个随机行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61619315/