代码之家  ›  专栏  ›  技术社区  ›  elPastor

熊猫:标准化不规则时间间隔

  •  1
  • elPastor  · 技术社区  · 6 年前

    我想知道熊猫是否有一些内置的功能,可以采取随机时间间隔(大约小时)并将它们转换为标准小时。代码示例和非工作尝试:

    import pandas as pd
    
    df = pd.DataFrame({'start': ['2018-09-04 01:12', '2018-09-04 02:11'], 
                       'end'  : ['2018-09-04 02:10','2018-09-04 03:20'], 
                       'val'  : [500, 600]})[['start','end','val']]
    
    df[['start','end']] = df[['start','end']].apply(pd.to_datetime)
    

    给我们:

               start               end  val
    2018-09-04 01:12  2018-09-04 02:10  500
    2018-09-04 02:11  2018-09-04 03:20  600
    

    以及:

    df = df.resample('1H', on = 'start', ).reset_index()
    

    理想情况下会(但不会)产生:

               start               end     val
    2018-09-04 01:00  2018-09-04 01:59  406.78
    2018-09-04 02:00  2018-09-04 02:59  513.22
    2018-09-04 03:00  2018-09-04 03:59  180.00
    

    我可以编写一些代码来实现这一点,但我想熊猫会有一些简单的功能来实现这一点。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Prune    6 年前

    这不是一个足够普遍的分配来保证自己的方法。你对每一个输入间隔做了一个简单的线性分配,在一小时内中断。在第一个间隔中,总共记录了59分钟,因此每分钟的“值”为500/59(8.47+)。第二次是每分钟600/50(12.0)。

    你可以用一个相对简单的控制结构来实现这一点,尽管个别的分解有点“冗长”。创建新行时,使用 shift 运算符处理输入数据帧的当前行和前一行。您需要跟踪每一行的断点(最长时间),并对这两行执行线性计算。你的算术看起来像

    TIME          VALUE
    1:00 - 2:00   (1:12 - 1:00) * 0 + (2:00 - 1:12) * 500/59
    2:00 - 3:00   (2:11 - 2:00) * 500/59 + (3:00 - 2:11) * 600/50
    3:00 - 4:00   (3:20 - 3:00) * 600/50 + (4:00 - 3:20) * 0
    

    你能把这些细节变成你需要的代码吗?