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

时间:2018-09-04 23:44:13

标签: python pandas timestamp resampling

我想知道Pandas是否具有一些内置功能来获取随机的时间间隔(大约几小时)并将其转换为标准时间。代码示例和不起作用的尝试:

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

我可以编写一些hack程序来实现此功能,但认为Pandas将具有一些简单的功能来实现此目的。

1 个答案:

答案 0 :(得分:0)

这不是一个足够常见的分配以保证其自身的方法。您正在对每个输入时间间隔进行简单的线性分配,该时间间隔是小时。在第一个间隔中,您总共记录了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

您可以将这些详细信息转换为所需的代码吗?