python - Pandas 数据框,根据唯一值的数量选择 n 个随机行

标签 python python-3.x pandas

我正在研究一个训练良好的文本分类问题,但我的类别非常不平衡,阻碍了结果。最大的 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

最佳答案

您可以使用 samplegroupby().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/

相关文章:

python - 按行和列获取单元格的值

python - 将字典中的值从字符串转换为浮点型

python - Pandas:在具有不同名称的字段上加入 DataFrames?

python - 关闭Python线程以防止内存泄漏

python - 如何在 python 3.6 中使用类型提示?

python - 如何循环 json 文件并根据特定条件更改特定值

python - pandas.DataFrame.replace() 得到 "OverflowError: Python int too large to convert to C long"

python - Pandas:根据除一行之外的其他多级列对最里面的列进行分组排序

python - 如何区分两个相邻的相连形状

python OCR : Converting Scanned Image Into Text For Processing