2015-05-19 23 views
21

Tôi có khung dữ liệu gấu trúc với 50 nghìn hàng. Tôi đang cố gắng để thêm một cột mới đó là một số nguyên được tạo ngẫu nhiên từ 1 đến 5.Pandas: tạo cột mới trong df với số nguyên ngẫu nhiên từ phạm vi

Nếu tôi muốn 50k số ngẫu nhiên tôi muốn sử dụng:

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

nhưng cho điều này tôi không chắc chắn làm thế nào để làm nó.

Side lưu ý trong R, tôi muốn làm:

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

Bất kỳ lời đề nghị?

+0

Trong gấu trúc/numpy, có một hàm trực tiếp 'np.random.randint (thấp, cao, kích thước)'. Không cần phải thực sự tạo ra phạm vi 'thấp: cao' và mẫu từ nó, như chúng ta làm trong R. – smci

Trả lời

31

Một giải pháp là sử dụng np.random.randint:

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

Để làm cho kết quả tái sản xuất, bạn có thể thiết lập các hạt giống với np.random.seed(42).

+0

Cảm ơn phần' random.seed'. – screechOwl

+0

Bạn được chào đón, vui vì tôi có thể giúp đỡ. – Matt

+0

@screechOwl: Giải pháp này là kém hơn khi sử dụng 'np.random.randint()' theo giải pháp của tôi. – smci

2

Để thêm cột số nguyên ngẫu nhiên, hãy sử dụng randint(low, high, size). Không cần phải lãng phí bộ nhớ phân bổ range(low, high); có thể có nhiều bộ nhớ nếu high lớn.

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

(Cũng lưu ý rằng khi chúng ta chỉ cần thêm một cột, kích thước chỉ là một số nguyên. Nói chung nếu chúng ta muốn tạo ra một mảng/dataframe của randint()s, kích thước có thể là một tuple, như trong Pandas: How to create a data frame of random integers?)

Các vấn đề liên quan