给出一个数据框:
df = pd.DataFrame({'a': [10, 20, 40, 50,60,70,80,100]},index = pd.DatetimeIndex(['2018-02-27 09:01:00','2018-02-27 09:02:00','2018-02-27 09:04:00','2018-02-27 09:05:00','2018-03-27 09:01:00','2018-03-27 09:02:00','2018-03-27 09:03:00','2018-03-27 09:05:00']))
我希望获取从09:04开始的值,在这种情况下,它应该返回2行,其中“ a”值分别为40和80。熊猫似乎只将日期时间作为asof()的输入,因此我必须做一些预处理以自己创建所有过滤器。 我想知道熊猫中是否已经有这样的功能,如09:04这样的输入就足够了,还是通过其他简单的方法来获得结果。
编辑: 抱歉,我在一开始输入了错误的df-第二天不应有09:04,因此需要asof()。
答案 0 :(得分:1)
我正在使用strftime
df[df.index.strftime('%H:%M')=='09:04']
Out[652]:
a
2018-02-27 09:04:00 40
2018-03-27 09:04:00 90
答案 1 :(得分:1)
如果需要忽略秒,可以使用.between_time
df.between_time('09:04', '09:05', include_end=False)
# a
#2018-02-27 09:04:00 40
#2018-03-27 09:04:00 90
或者,如果您想使其更具功能性:
time = '09:04'
df.between_time(time, (pd.to_datetime(time)+pd.Timedelta('1min')).time(), include_end=False)
答案 2 :(得分:0)
您可以尝试使用布尔索引:
df[(df.index.hour == 9) & (df.index.minute == 4)]
输出:
a
2018-02-27 09:04:00 40
2018-03-27 09:04:00 90