web-dev-qa-db-fra.com

Pandas: créer une nouvelle colonne en df avec des entiers aléatoires de la plage

J'ai un cadre de données pandas avec 50k lignes. J'essaie d'ajouter une nouvelle colonne qui est un entier généré aléatoirement de 1 à 5.

Si je veux 50k nombres aléatoires j'utiliserais:

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

mais pour cela, je ne sais pas comment le faire.

Note de côté dans R, je ferais:

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

Aucune suggestion?

47
screechOwl

Une solution consiste à utiliser 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])

Afin de rendre les résultats reproductibles, vous pouvez définir la valeur de départ avec np.random.seed(42) .

68
Matt

Pour ajouter une colonne d'entiers aléatoires, utilisez randint(low, high, size). Inutile de gaspiller de la mémoire en allouant range(low, high); cela pourrait représenter beaucoup de mémoire si high est volumineux.

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

(Notez également que lorsque nous ajoutons une seule colonne, size n’est qu’un entier. En général, si nous voulons générer un tableau/cadre de données de randint()s, la taille peut être un tuple. , comme dans Pandas: Comment créer un cadre de données d'entiers aléatoires? )

12
smci