Pandas:DateTimeIndex中的剪辑时间取决于日期

时间:2017-08-27 14:06:17

标签: python pandas datetime dataframe

我有一个带有DateTimeIndex的pandas DataFrame:yyyy-mm-dd HH:MM:SS

                       A  B  C
2015-08-08 16:00:00    1  2  3
2015-08-08 16:00:08    4  5  6
...

我想提取某个时间范围HH:MM:SS的行。但是,此时间范围因日期yyyy-mm-dd而异。

是否可以使用某种将日期映射到时间范围的字典,并相应地剪切DateTimeIndex?

1 个答案:

答案 0 :(得分:2)

您可以按照loc的已过滤list DataFrames的列表理解,按开始和结束时间列表的dict进行过滤。

最后concat他们对一个人:

print (df)
                     A  B  C
2015-08-08 16:00:00  1  2  3
2015-08-09 13:00:08  4  5  6
2015-08-09 13:00:10  4  5  7

d = {'2015-08-08':['16:00:00', '16:00:10'],'2015-08-09':['13:00:08', '13:00:20']}

df1 = pd.concat([df.loc[k + ' ' + v[0] : k + ' ' + v[1]] for k, v in d.items()])
print (df1)
                     A  B  C
2015-08-09 13:00:08  4  5  6
2015-08-09 13:00:10  4  5  7
2015-08-08 16:00:00  1  2  3

boolean indexing的另一个解决方案:

df1 = pd.concat([df[(df.index >= k + ' ' + v[0]) & 
                    (df.index <= k + ' ' + v[1])] for k, v in d.items()])
print (df1)
                     A  B  C
2015-08-09 13:00:08  4  5  6
2015-08-09 13:00:10  4  5  7
2015-08-08 16:00:00  1  2  3