2015-05-19 20 views
21

Mam ramkę danych pandy z 50 tys. Wierszy. Próbuję dodać nową kolumnę, która jest losowo wygenerowaną liczbę całkowitą od 1 do 5.Pandy: utwórz nową kolumnę w df z losowymi liczbami całkowitymi z zakresu

Jeśli chcę 50k liczb losowych użyję:

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

ale tego nie jestem pewien jak to zrobić.

uwaga Side w R, zrobiłbym:

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

sugestie?

+0

W pandach/numpy istnieje bezpośrednia funkcja 'np.random.randint (low, high, size)'. Nie ma potrzeby generowania zakresu 'low: high' i próbki z niego, jak to robimy w R. – smci

Odpowiedz

31

Jednym z rozwiązań jest użycie 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]) 

Aby powtarzalne wyniki można ustawić ziarno z np.random.seed(42).

+0

Dzięki za część' random.seed'. – screechOwl

+0

Nie ma za co, cieszę się, że mogłem pomóc. – Matt

+0

@screechOwl: To rozwiązanie jest gorsze niż użycie 'np.random.randint()' dla mojego rozwiązania. – smci

2

Aby dodać kolumnę losową całkowitą, należy użyć randint(low, high, size). Nie ma potrzeby marnować pamięci przydzielając range(low, high); to może być dużo pamięci, jeśli high jest duże.

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

(Zauważ też, że gdy jesteśmy po prostu dodanie kolumny, rozmiar jest tylko liczbą całkowitą. W ogóle, jeśli chcemy wygenerować tablicę/dataframe z randint()s, rozmiar może być krotka, jak w Pandas: How to create a data frame of random integers?)

Powiązane problemy