【问题标题】:Unable to create pandas dataframe with particular number of class label无法创建具有特定数量的类标签的熊猫数据框
【发布时间】:2026-01-18 19:10:01
【问题描述】:

是否可以创建一个随机的 pandas 数据框,其中 1500 行的类标签为 0,500 行的类标签为 1。

应该是这样的

feature_1   class_label

sdfdsfsdfd    0
kjdkfkjdsf    0
jkkjhjknn     1
dfsfgdsfd     0
gfdgdfsdd     1

feature_1 列的值可以是任何值,但它的 1500 个值应具有标签 0 和 500 个值 应该有标签 1。

【问题讨论】:

    标签: python pandas dataframe machine-learning


    【解决方案1】:

    我们可以在这里使用numpy,并使用np.random.choice从列长度的range中抽取随机样本:

    a = np.zeros(2000, dtype='int')
    a[np.random.choice(range(len(a)), 500)] = 1
    pd.Series(a).rename_axis('feature_1').reset_index(name='label')
          feature_1  label
    0             0      0
    1             1      0
    2             2      0
    3             3      0
    4             4      0
    ...         ...    ...
    1995       1995      1
    1996       1996      1
    1997       1997      0
    1998       1998      1
    1999       1999      0
    
    [2000 rows x 2 columns]
    

    或者另一个想法是:

    (pd.Series(np.r_[[0]*1500, [1]*500], name='label')
       .sample(frac=1)
       .rename_axis('feature_1')
       .reset_index(name='label'))
    
          feature_1  label
    0           311      0
    1           217      0
    2          1940      1
    3          1538      1
    4          1904      1
    ...         ...    ...
    1995        550      0
    1996        836      0
    1997       1065      0
    1998       1343      0
    1999       1070      0
    
    [2000 rows x 2 columns]
    

    【讨论】:

      【解决方案2】:

      试试这个:

      import random
      import string
      import numpy as np
      import pandas as pd
      def get_random_string(length):
          letters = string.ascii_lowercase
          result_str = ''.join(random.choice(letters) for i in range(length))
          return result_str
      arr=[]
      label=[]
      for i in range(2000):
        if i<1500:
          label.append(0)
        else:
          label.append(1)
        arr.append(get_random_string(8))
      df=pd.DataFrame([arr,label]).T
      df.columns=['f1','label']
      df.head()
      

      输出:

               f1 label
      0  twfzvgpp     0
      1  fvndhbaq     0
      2  sawoflua     0
      3  yqdgqtmx     0
      4  glfsdyix     0
      

      Source

      【讨论】:

        【解决方案3】:
        class_label= random.sample(
                [0 for i in range(1500)]+[1 for i in range(500)])
        df = pd.dataframe(dict(
                class_label= class_label,
                feature_1=list(range(2000))))
        

        【讨论】: