按几个时间段筛选熊猫数据帧



我有一个数据帧,其中有一个时间戳列(最初是使用pd.to_detime转换的字符串值(,对其进行排序,并设置为索引。我希望通过这个索引过滤数据帧,以删除未包含在给定时间段集中的所有行。

示例时间段为(格式为%m/%d/%Y%H:%m:%S。如果重要的话(:

10/05/2020 13:14:40.980 to 10/05/2020 21:50:52.323  
10/06/2020 06:45:31.839 to 10/06/2020 17:05:11.382  
10/06/2020 22:10:05.872 to 10/07/2020 07:03:52.872  
etc....

我发现df.between_time(*pd.to_datetime(['10/05/2020 13:14:40.980', '10/06/2020 21:50:52.323']).time)适用于选择单个时间段,但如何同时选择多个时间段?中间时间可以这样使用吗?我需要制作一本参考词典来配对不同时间段的开始/结束时间吗?

此外,在进行此筛选步骤时,计算从总数中排除的行数将有助于了解。

谢谢你的帮助。

只需使用布尔条件,带'&'在时间段之间。

import pandas as pd
df = pd.Series(data=1, index=pd.date_range("2019-1-1", "2019-5-1"))
df.loc[(df.index < pd.to_datetime("2019-1-8")) | ((df.index > pd.to_datetime("2019-4-22")) & (df.index < pd.to_datetime("2019-4-25")))]

结果:

2019-01-01    1
2019-01-02    1
2019-01-03    1
2019-01-04    1
2019-01-05    1
2019-01-06    1
2019-01-07    1
2019-04-23    1
2019-04-24    1
dtype: int64

在这里,我过滤了2019年4月22日至2019年4日25日之间的日期,日期较小(2019年8月1日((这些日期格式为"dd/mm/yyyy",而在代码中,我的格式为"yyyy-mm-dd"(。它将与时间一样工作

最新更新