生成特定于趋势的数据

时间:2019-10-30 07:52:23

标签: python pandas numpy

我有一个包含2列的数据集(df1)。

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. 每个date_1的值_1(总计)不得超过5000。

  2. date_2和value_1应该具有增加的趋势,即在date_2上聚合,value_1应该每天增加,例如,如果对于date_2,聚合的value_1是1000,那么对于下一个date_2,该值应该大于1000。 p>

数据框具有唯一的(日期_1,日期_2)元组。

思考之后,我想到的是这样的方法:

步骤-1:F_Date的值从01/09/2019到30/09/2019。我想生成一个value_1,使其具有增加的趋势,并且value_1应该在50-25000的范围内。

第2步:一旦有了具有F_1和value_1的新数据帧(第1步中的df2),我们将读取已有的数据帧(df1)并以对B_Date而言递增值的方式分配value_1趋势也是如此。

例如:

假设对于df2中的F_Date,我们在01/01/2019的条目为50。在df1中,我们有3个与F_Date对应的B_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

我无法理解两个步骤如何实现趋势(增加)。任何人都可以帮助您,也可以进行第二步。

谢谢

1 个答案:

答案 0 :(得分:1)

我可能是错的,但是从趋势生成的角度来看,您的问题很模糊。但是,据我所知,这就是您的做法:

步骤-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

一旦有了数据,就可以对另一个数据框进行外部联接,然后在数据集中创建一个具有value_1的数据框。

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

我不确定您如何需要第二趋势,更多详细信息会有所帮助。