Создайте данные, относящиеся к тренду - PullRequest
3 голосов
/ 30 октября 2019

У меня есть набор данных (df1), который имеет 2 столбца.

F_Date      B_Date
01/09/2019  02/08/2019
01/09/2019  03/08/2019
02/09/2019  03/08/2019
01/09/2019  04/08/2019
02/09/2019  04/08/2019
03/09/2019  04/08/2019
02/09/2019  05/08/2019
03/09/2019  05/08/2019
04/09/2019  05/08/2019
01/09/2019  06/08/2019
02/09/2019  06/08/2019
03/09/2019  06/08/2019
04/09/2019  06/08/2019
05/09/2019  06/08/2019
02/09/2019  07/08/2019
03/09/2019  07/08/2019
04/09/2019  07/08/2019
05/09/2019  07/08/2019
06/09/2019  07/08/2019
02/09/2019  08/08/2019
03/09/2019  08/08/2019

Я хочу создать новый столбец value_1 такой, чтобы:

  1. для каждой даты_1 значение_1 (агрегированное) не превышало 5000.

  2. дата_2 и значение_1 должны иметь тенденцию к увеличению, т. Е. Агрегироваться по дате_2, значение_1 должно увеличиваться каждый день, например, если для даты_2 агрегированное значение_1 равно 1000, то для следующей даты_2 значение должно быть больше 1000.

У фрейма данных есть уникальные (date_1, date_2) кортежи.

Подумав, я подумал о таком подходе, что:

Шаг - 1:F_Date имеет значения с 01/09/2019 по 30/09/2019. Я хочу создать значение_1 так, чтобы оно имело тенденцию к увеличению, а значение_1 должно находиться в диапазоне 50-25000.

Шаг - 2: Как только у нас будет новый фрейм данных (df2 из шага-1) с F_1 и значением_1, мы читаем имеющийся у нас фрейм данных (df1) и присваиваем значение_1 таким образом, что для B_Dateэто растущая тенденция, а также.

Например:

Допустим, для F_Date в df2 у нас есть запись на 01.01.2009 как 50. а в df1 у нас есть 3 B_Date, соответствующих F_Date, тогда фрейм данных будет выглядетькак:

ОЖИДАЕМЫЙ ВЫХОД:

     F_Date     B_Date     value_1
    01/09/2019  02/08/2019  5
    01/09/2019  02/08/2019  15
    01/09/2019  02/08/2019  30

Я не могу понять, как добиться тренда (увеличения) для обоих шагов. Может кто-нибудь помочь с этим, а также с шагом 2.

Спасибо

1 Ответ

1 голос
/ 31 октября 2019

Я могу ошибаться, но ваш вопрос довольно расплывчат в смысле генерации тренда. Однако, насколько мне известно, вот как вы идете:

Шаг -1

Создайте новый столбец value_1 с трендом, используя:

import numpy as np

min_y = 50
max_y = 5000
min_x = 1
# any number max_x can be chosen
# this number controls the shape of the logarithm, therefore the final distribution
max_x = 10

# generate (uniformly) and sort 30 random float x in [min_x, max_x)
x = np.sort(np.random.uniform(min_x, max_x, 30))
# get log(x), i.e. values in [log(min_x), log(max_x))
log_x = np.log(x)
# scale log(x) to the new range [min_y, max_y)
y = (max_y - min_y) * ((log_x - np.log(min_x)) / (np.log(max_x) - np.log(min_x))) + min_y

Как только выИмея данные, вы можете выполнить внешнее соединение с другим фреймом данных, а затем создать фрейм данных, имеющий значение_1 в наборе данных.

joined_df = pd.merge(df1,df2,on='F_Date')

Я не уверен, как вам нужен второй тренд, подробности помогут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...