我想知道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会有一些简单的功能来做到这一点。
这不是一个足够普遍的分配来保证自己的方法。您正在对每个输入间隔做一个简单的线性分配,在一小时内完成。在第一个间隔中,您记录了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
你能把这些细节变成你需要的代码吗?