У меня есть фрейм данных df1, имеющий столбец для date_1 со значениями с 01/09/2019 по 30/09/2019. т.е. 30 значений и соответствующий счет.
DF1
date_1 count
01/09/2019 5
02/09/2019 4
03/09/2019 5
04/09/2019 6
05/09/2019 7
06/09/2019 8
07/09/2019 10
08/09/2019 9
09/09/2019 11
10/09/2019 12
11/09/2019 13
12/09/2019 14
13/09/2019 15
14/09/2019 16
Я хочу создать кадр данных df2 такой, что:
Существует новый столбец date_2.
date_2 генерируются для функции счетчика, присутствующего в df1.
Например: новый фрейм данных df2 имеет 5 записей (начиная с count = 5) для 01/09/2019, а столбец date_2 может принимать значения от 30 дней до даты_1 до 30/08 /2019 (текущая дата в date_1 - 1)
Ожидаемый результат:
date_1 count date_2
01/09/2019 5 02/08/2019
01/09/2019 5 10/08/2019
01/09/2019 5 12/08/2019
01/09/2019 5 25/08/2019
01/09/2019 5 28/08/2019
02/09/2019 4 03/08/2019
02/09/2019 4 10/08/2019
02/09/2019 4 20/08/2019
02/09/2019 4 25/08/2019
date_2 может быть произвольно выбран из диапазона (от 30 - date_1
до date_1 - 1
)т. е. в нашем примере на 01/09/2019, с 08/08/2019 по 30/08/2019
РЕДАКТИРОВАТЬ
Мне удалось сгенерировать случайную дату_2 с помощьюфункция:
def pick_random_delta_in_range(min_days=1, max_days=30):
if min_days is None and max_days is None:
return datetime.timedelta(days=1, minutes=0, seconds=0)
if min_days is None:
return max_days
if max_days is None:
return min_days
days_to_be_added = random.randint(min_days, max_days)
return datetime.timedelta(days=days_to_be_added, minutes=0, seconds=0)
def gen_date_by_delta(src_dates, date_format, delta_min, delta_max):
gen_dates = []
for dt in src_dates:
src_date = datetime.datetime.strptime(dt, date_format)
if src_date is None:
gen_dates.append("")
continue
chosen_delta = pick_random_delta_in_range(min_days=delta_min, max_days=delta_max)
result_date = (src_date + chosen_delta).strftime(date_format)
gen_dates.append(result_date)
return gen_dates
date_2 = gen_date_by_delta(src_dates=df1["date_1"], date_format=date_format, delta_min=1, delta_max=30)
Я не могу понять, как копировать поля в кадре данных в соответствии с количеством и генерировать даты соответственно.
* В настоящее время дельта генерируется случайным образом и может генерировать ту же дельту для той же даты_1, что приводит к дублированию записей. Я не хочу создавать повторяющиеся записи. *
Может кто-нибудь предложить способ создать то же самое.
Спасибо