【问题标题】:Generate a trend specific data生成趋势特定数据
【发布时间】:2019-10-30 07:52:23
【问题描述】:

我有一个包含 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,value_1(聚合)不应超过 5000。

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

数据框具有唯一的 (date_1,date_2) 元组。

经过思考,我正在考虑这样的方法:

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

第 2 步:一旦我们有了一个具有 F_1 和 value_1 的新数据帧(来自第 1 步的 df2),我们读取我们拥有的数据帧 (df1) 并分配 value_1,使得对于 B_Date,有一个增加趋势也是如此。

例如:

假设 df2 中的 F_Date 我们有一个 2019 年 1 月 1 日的条目为 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 步。

谢谢

【问题讨论】:

    标签: python pandas numpy


    【解决方案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')
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 1970-01-01
      • 2023-03-11
      • 2021-07-15
      相关资源
      最近更新 更多