在合并期间使用DatetimeIndex进行间隔匹配PeriodIndex

时间:2015-12-11 07:08:33

标签: python pandas indexing

鉴于以下DataFrames,我想添加系列' bar'从df_other2df2,以便df2(我理解为间隔)"匹配" df_other2的日期时间索引(不是间隔)(也称为"句点",但实际上是日期时间)。匹配条件应该是df_other2.perioddf2期间(即日期在区间内)。

我希望将目标索引定义为PeriodIndex,将源索引定义为DatetimeIndex足以进行匹配,但似乎并非如此。我有什么替代方法可以让它发挥作用?

>>> df = pd.DataFrame({'period': PeriodIndex(['2012-01', '2012-02', '2012-03'], dtype='int64', freq='M'), 'foo': [1, 2, 3]})
>>> df2 = df.set_index('period')
>>> df2
         foo    x
period           
2012-01    1  NaN
2012-02    2  NaN
2012-03    3  NaN
>>> df_other = pd.DataFrame({'period': [datetime.datetime(2012, 1, 1), datetime.datetime(2012, 2, 3), datetime.datetime(2012, 3, 10)], 'bar': ['a', 'b', 'c']})
>>> df_other2 = df_other.set_index('period')
>>> df_other2
           bar
period        
2012-01-01   a
2012-02-03   b
2012-01-10   c
>>> df2['x'] = df_other['bar']
>>> df2
         foo    x
period           
2012-01    1  NaN   # expected x='a' as '2012-1-1' is part of this period
2012-02    2  NaN   # expected x='b'
2012-03    3  NaN   # expected x='c'

1 个答案:

答案 0 :(得分:0)

我决定将所有df_other2.perioddf2.period对齐(并使它们DatetimeIndex)并照常合并。

我将在未来的版本中等待更好的支持:

  

对于常规时间跨度,pandas使用Period对象作为标量值   和PeriodIndex用于跨度序列。更好地支持不规则   具有任意起点和终点的间隔即将到来   未来版本。

http://pandas.pydata.org/pandas-docs/stable/timeseries.html#time-stamps-vs-time-spans