在python中合并具有不同时间频率的系列/数据帧

在python中合并具有不同时间频率的系列/数据帧,python,pandas,datetime,dataframe,merge,Python,Pandas,Datetime,Dataframe,Merge,我正在尝试合并两个系列,一个以小时为单位,另一个以分钟为单位(并将索引保持在分钟级别): B系列(分钟): Series B time 2017-09-01 00:00:00 NaN 2017-09-01 00:03:00 -0.000350 2017-09-01 00:06:00 0.000401 Name: B, dtype: float64 我想按小时合并这两个系列。所需的合并数据帧为: time 2017-09-01 00:00:00 NaN

我正在尝试合并两个系列,一个以小时为单位,另一个以分钟为单位(并将索引保持在分钟级别):

B系列(分钟):

Series B

time
2017-09-01 00:00:00         NaN
2017-09-01 00:03:00   -0.000350
2017-09-01 00:06:00    0.000401
Name: B, dtype: float64
我想按小时合并这两个系列。所需的合并数据帧为:

time
2017-09-01 00:00:00         NaN       0.5
2017-09-01 00:03:00   -0.000350       0.5
2017-09-01 00:06:00    0.000401       0.5
2017-09-01 01:00:00    0.002301       0.4
2017-09-01 01:03:00    0.005601       0.4
在搜索SO之后,我发现了一种方法,即在序列B中创建一个“小时”列,然后使用A的索引和B的“小时”列将A连接到B:(参考:)

但我收到了错误信息:

TypeError: Argument 'values' has incorrect type (expected numpy.ndarray, got Index)
有人知道如何解决这个问题吗?或者有更好的方式加入这两个系列?非常感谢

演示:

In [280]: A
Out[280]:
time
2017-09-01 01:00:00    0.5
2017-09-01 02:00:00    0.4
Name: val, dtype: float64

In [281]: B
Out[281]:
time
2017-09-01 00:00:00         NaN
2017-09-01 00:03:00   -0.000350
2017-09-01 00:06:00    0.000401
Name: val, dtype: float64

In [282]: B.to_frame('B').join(A.to_frame('A').set_index(A.index.shift(-1, freq='H')).resample('3T').ffill())
Out[282]:
                            B    A
time
2017-09-01 00:00:00       NaN  0.5
2017-09-01 00:03:00 -0.000350  0.5
2017-09-01 00:06:00  0.000401  0.5

很抱歉,我本应该更清楚,但我希望将合并的数据帧保持在分钟级别,即索引B。这就是我使用(how='left')的原因。我对问题进行了编辑,使其更具体。@ian_chan,你能在问题中发布你想要的(输出)数据集吗?当然可以。只是做了些改变。很抱歉给您带来不便,您为什么要将序列
A
中的小时
01
与序列
B
中的小时
00
进行匹配?因为这些是“自上一行以来的返回”。i、 e.0.5是00:00到01:00之间的返回时间。这可以使用shift命令进行调整,因此我的主要问题仍然是频率的差异:(我已经更新了我的答案-请检查谢谢!所以诀窍是重新采样和ffill!
TypeError: Argument 'values' has incorrect type (expected numpy.ndarray, got Index)
In [280]: A
Out[280]:
time
2017-09-01 01:00:00    0.5
2017-09-01 02:00:00    0.4
Name: val, dtype: float64

In [281]: B
Out[281]:
time
2017-09-01 00:00:00         NaN
2017-09-01 00:03:00   -0.000350
2017-09-01 00:06:00    0.000401
Name: val, dtype: float64

In [282]: B.to_frame('B').join(A.to_frame('A').set_index(A.index.shift(-1, freq='H')).resample('3T').ffill())
Out[282]:
                            B    A
time
2017-09-01 00:00:00       NaN  0.5
2017-09-01 00:03:00 -0.000350  0.5
2017-09-01 00:06:00  0.000401  0.5