Pandas 基于时间将多索引数据帧中的项插入到常规数据帧中

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

我有一个按“日期”索引的常规数据帧,称为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    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中是一种非常有效的方法。