2015-05-19 28 views
21

aralığından rastgele tam sayılarla df olarak yeni sütun oluştur. 50k satırlı pandalar veri çerçevem ​​var. Ben 50k rasgele sayılar istiyorsanız Kullanayım 5'ePandalar:

1'den rastgele oluşturulmuş tam sayıdır yeni bir sütun eklemek çalışıyorum:

df1['randNumCol'] = random.sample(xrange(50000), len(df1)) 

ancak bunun için emin değilim nasıl yapılır. R

Yan not, ben yaparım:

sample(1:5, 50000, replace = TRUE) 

bir öneriniz?

+0

Pandalar/numpy'de, 'np.random.randint (düşük, yüksek, boyut)' doğrudan işlevi vardır. Gerçekten de "low: high" aralığından ve numunesinden örnek oluşturmaya gerek yok, biz de yaptığımız gibi. – smci

cevap

31

bir çözüm np.random.randint kullanmaktır: Sonuçları yapabilmek için

import numpy as np 
df1['randNumCol'] = np.random.randint(1, 6, df1.shape[0]) 

# or if the numbers are non-consecutive (albeit slower) 
df1['randNumCol'] = np.random.choice([1, 9, 20], df1.shape[0]) 

Eğer np.random.seed(42) ile tohum ayarlayabilirsiniz tekrarlanabilir.

+0

"Random.seed" kısmı için de teşekkürler. – screechOwl

+0

Rica ederim, yardımcı olabildiğime sevindim. – Matt

+0

@screechOwl: Bu çözüm, benim çözümüm için 'np.random.randint()' i kullanmaktan daha aşağıdır. – smci

2

Rasgele bir tam sayı sütununu eklemek için randint(low, high, size)'u kullanın. range(low, high)'u ayıran belleği boşa harcamaya gerek yoktur; high büyükse bu çok fazla bellek olabilir.

df1['randNumCol'] = np.random.randint(0,5, size=len(df1)) 

(sadece bir sütun eklerken Not da boyutu sadece bir tamsayıdır olduğu. Genel olarak randint()s bir dizi/dataframe oluşturmak istiyorum, boyut, bir demet olabilir Pandas: How to create a data frame of random integers? gibi)