Pandas 选择下一行而不是最后一行

Pandas 选择下一行而不是最后一行,pandas,Pandas,根据文档,asof()(not merge_asof)只返回asof时间之前的“last”行,而不返回后面的“next”行。如何实现这种行为?本质上就像merge_of()函数的参数direction='forward'一样 例如,下面应该返回值40和50 df = pd.DataFrame({'a': [10, 20, 30, 40, 50]}, index=pd.DatetimeIndex(['2018-02-27 09:01:00',

根据文档,asof()(not merge_asof)只返回asof时间之前的“last”行,而不返回后面的“next”行。如何实现这种行为?本质上就像merge_of()函数的参数direction='forward'一样

例如,下面应该返回值40和50

df = pd.DataFrame({'a': [10, 20, 30, 40, 50]},
               index=pd.DatetimeIndex(['2018-02-27 09:01:00',
                                       '2018-02-27 09:02:00',
                                      '2018-02-27 09:03:00',
                                      '2018-02-27 09:04:00',
                                      '2018-02-27 09:05:00']))

df.asof(pd.DatetimeIndex(['2018-02-27 09:03:30',
                       '2018-02-27 09:04:30']))

这里有一种方法
searchsorted

s=pd.DatetimeIndex(['2018-02-27 09:03:30',
                       '2018-02-27 09:04:30'])
np.searchsorted(df.index,s)
array([3, 4])
df.iloc[np.searchsorted(df.index,s)]
                      a
2018-02-27 09:04:00  40
2018-02-27 09:05:00  50

谢谢一个问题是,对于边,索引将越界并抛出错误,而默认情况下,应返回nan(例如s中的“2018-02-27 09:06:00”)。是否有一个简单的修复方法?@iwbabn使用np.clip将最大值限制为df indexbut的最大值,这将选择最后一行而不是nan?09:06:00在数据集之外。