Как генерировать случайные даты между диапазоном дат внутри столбца панд? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть df, который выглядит так

df:

id   dob
1    7/31/2018
2    6/1992

Я хочу сгенерировать 88799 случайных дат для перехода в столбец dob в кадре данных между датами от 1960-01-01 до 1990-12-31, сохраняя формат mm/dd/yyyy без отметки времени.

Как бы я это сделал?

Я пытался:

date1 = (1960,01,01)
date2 = (1990,12,31)

for i range(date1,date2):
    df.dob = i

1 Ответ

0 голосов
/ 30 октября 2018

Я бы выяснил, сколько дней в вашем диапазоне дат, затем выбрал бы 88799 случайных целых чисел в этом диапазоне и, наконец, добавил бы это как временную дельту с unit='d' к вашей минимальной дате:

min_date = pd.to_datetime('1960-01-01')
max_date = pd.to_datetime('1990-12-31')

d = (max_date - min_date).days + 1

df['dob'] = min_date + pd.to_timedelta(pd.np.random.randint(d,size=88799), unit='d')

>>> df.head()
         dob
0 1963-03-05
1 1973-06-07
2 1970-08-24
3 1970-05-03
4 1971-07-03

>>> df.tail()
             dob
88794 1965-12-10
88795 1968-08-09
88796 1988-04-29
88797 1971-07-27
88798 1980-08-03

РЕДАКТИРОВАТЬ Вы можете форматировать даты, используя .strftime('%m/%d/%Y'), но учтите, что это значительно замедлит выполнение:

df['dob'] = (min_date + pd.to_timedelta(pd.np.random.randint(d,size=88799), unit='d')).strftime('%m/%d/%Y')

>>> df.head()
          dob
0  02/26/1969
1  04/09/1963
2  08/29/1984
3  02/12/1961
4  08/02/1988
>>> df.tail()
              dob
88794  02/13/1968
88795  02/05/1982
88796  07/03/1964
88797  06/11/1976
88798  11/17/1965
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...