熊猫从时间开始选择行,而不是日期时间

时间:2019-04-29 13:13:59

标签: pandas

给出一个数据框:

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()。

3 个答案:

答案 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