Pandas 基于时间将多索引数据帧中的项插入到常规数据帧中
我有一个按“日期”索引的常规数据帧,称为ES:Pandas 基于时间将多索引数据帧中的项插入到常规数据帧中,pandas,Pandas,我有一个按“日期”索引的常规数据帧,称为ES: Price Day Hour num_obs med abs_med Ret Date 2006-01-03 08:30:00 1260.583333 1 8 199 1260.416667 0.166667 0.000364 2006-01-03 08:35:00 1261.291667 1 8 199 1260.697917 0.593750
Price Day Hour num_obs med abs_med Ret
Date
2006-01-03 08:30:00 1260.583333 1 8 199 1260.416667 0.166667 0.000364
2006-01-03 08:35:00 1261.291667 1 8 199 1260.697917 0.593750 0.000562
2006-01-03 08:40:00 1261.125000 1 8 199 1260.843750 0.281250 -0.000132
2006-01-03 08:45:00 1260.958333 1 8 199 1260.895833 0.062500 -0.000132
2006-01-03 08:50:00 1261.214286 1 8 199 1260.937500 0.276786 0.000203
我用下面的多重索引对另一个数据帧进行索引。第一个索引从0到23,第二个索引从0到55。换句话说,我们有每天5分钟的增量数据
5min_Ret
0 0 2.235875e-06
5 9.814064e-07
10 -1.453213e-06
15 4.295757e-06
20 5.884896e-07
25 -1.340122e-06
30 9.470660e-06
35 1.178204e-06
40 -1.111621e-05
45 1.159005e-05
50 6.148861e-06
55 1.070586e-05
1 0 1.485287e-05
5 3.018576e-06
10 -1.513273e-05
15 -1.105312e-05
20 3.600874e-06
...
我想在原始数据框ES中创建一个列,在每个适当的小时/5分钟组合中都有适当的“5分钟”
我尝试过多种方法:在行上循环,找到一些apply函数。但到目前为止,一切都不起作用。我觉得我忽略了一个简单的、python式的解决方案
预期的输出将为原始数据帧创建一个名为“5min_-ret”的新列,其中每一行对应于包含5min_-ret的较小数据帧的正确的小时/5min对
Price Day Hour num_obs med abs_med Ret 5min_ret
Date
2006-01-03 08:30:00 1260.583333 1 8 199 1260.416667 0.166667 0.000364 xxxx
2006-01-03 08:35:00 1261.291667 1 8 199 1260.697917 0.593750 0.000562 xxxx
2006-01-03 08:40:00 1261.125000 1 8 199 1260.843750 0.281250 -0.000132 xxxx
2006-01-03 08:45:00 1260.958333 1 8 199 1260.895833 0.062500 -0.000132 xxxx
2006-01-03 08:50:00 1261.214286 1 8 199 1260.937500 0.276786 0.000203 xxxx
我认为一种方法是按小时和分钟使用
merge
。首先从datetimeindex在ES
中创建一列“min”,例如:
ES['min'] = ES.index.minute
现在,您可以DF\u multi
与包含我命名为DF\u multi
的列“5min\u Ret”的多索引DF合并,例如:
ES = ES.merge(df_multi.reset_index(), left_on = ['hour','min'],
right_on = ['level_0','level_1'], how='left')
在这里,您可以将ES
中的'hour'和'min'与'level_0'和'level_1'合并,这是在执行reset_index
时从df_multi
的多重索引中创建的,并合并到左侧df的值上(即ES
)
您应该在
ES
中获得一个名为“5min_Ret”的新列,其中包含您要查找的值。如果不再需要,您可以通过ES=ES删除列“min”。删除('min',axis=1)
您可以共享预期输出吗?添加了一些预期输出,但很难获得正确的格式,希望有要点。我更感兴趣的是了解那些xxxx
。他们会有什么价值?这没有清除任何内容。代替xxx的应该是另一个数据框中5min_ret列的值,很抱歉我没有充分清除。非常感谢。工作得很好。在约100万行上速度非常快。再次感谢。@Rainymood很高兴能帮上忙,是的,merge
在pandas中是一种非常有效的方法。