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

问题描述 投票:1回答:1

我想知道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

我可以编写一些黑客来完成这项工作,但想到Pandas会有一些简单的功能来做到这一点。

python pandas timestamp resampling
1个回答
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

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

© www.soinside.com 2019 - 2024. All rights reserved.