无法创建具有特定数量的类标签的熊猫数据框

时间:2020-10-02 12:57:19

标签: python pandas dataframe machine-learning

是否可以创建一个随机的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。

3 个答案:

答案 0 :(得分:2)

我们可以在此处使用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]

答案 1 :(得分:1)

尝试一下:

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

答案 2 :(得分:0)

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))))