Как назначить случайные значения из списка столбцу в кадре данных Pandas? - PullRequest
0 голосов
/ 25 января 2019

Я работаю с Python в Bigquery и у меня большой фрейм данных (около 7 м строк).У меня также есть список lst, содержащий некоторые даты (скажем, все дни в данном месяце).

Я пытаюсь создать дополнительный столбец "random_day" в df со случайным значением lst в каждой строке.

Я попытался запустить цикл и применить функцию, но, будучи довольно большим набором данных, он оказался сложным.

Мои попытки пройдены по циклическому решению:

df["rand_day"] = ""

for i in a["row_nr"]:
  rand_day = sample(day_list,1)[0]
  df.loc[i,"rand_day"] = rand_day

И примените решение, определив сначала мою функцию, а затем вызвав ее:

def random_day():
  rand_day = sample(day_list,1)[0]
  return day

df["rand_day"] = df.apply(lambda row: random_day())

Любые подсказки на этот счет?Спасибо

1 Ответ

0 голосов
/ 25 января 2019

Используйте numpy.random.choice и при необходимости конвертируйте даты в to_datetime:

df = pd.DataFrame({
        'A':list('abcdef'),
        'B':[4,5,4,5,5,4],
})

day_list = pd.to_datetime(['2015-01-02','2016-05-05','2015-08-09'])
#alternative
#day_list = pd.DatetimeIndex(['2015-01-02','2016-05-05','2015-08-09'])

df["rand_day"] = np.random.choice(day_list, size=len(df))
print (df)
   A  B   rand_day
0  a  4 2016-05-05
1  b  5 2016-05-05
2  c  4 2015-08-09
3  d  5 2015-01-02
4  e  5 2015-08-09
5  f  4 2015-08-09
...