Python 在具有日期时间值的日期框上应用DatetimeIndex作为筛选器

Python 在具有日期时间值的日期框上应用DatetimeIndex作为筛选器,python,pandas,dataframe,datetime,datetimeindex,Python,Pandas,Dataframe,Datetime,Datetimeindex,好的,我正在学习使用DatetimeIndex和Dateframe对象。我遇到了一个新的问题,我不能直接看到解决方案,我希望有人可能有一个优雅的解决方案,使用熊猫函数,我可能还不知道 情况如下:一方面,我有一个非常庞大的数据帧,有许多行和几列,包括一个名为starttime的列,它的值是时间戳。可能有两行或多行具有相同的starttime值 开始时间结束时间。。。y x 身份证件 0 2015-10-11 00:00:55+00 2015-10-11 00:00:55+00 ...

好的,我正在学习使用DatetimeIndex和Dateframe对象。我遇到了一个新的问题,我不能直接看到解决方案,我希望有人可能有一个优雅的解决方案,使用熊猫函数,我可能还不知道

情况如下:一方面,我有一个非常庞大的数据帧,有许多行和几列,包括一个名为starttime的列,它的值是时间戳。可能有两行或多行具有相同的starttime值

开始时间结束时间。。。y x
身份证件
0    2015-10-11 00:00:55+00  2015-10-11 00:00:55+00  ...          1其他
1    2015-10-11 15:10:42+00  2015-10-11 15:10:42+00  ...          1其他
2    2014-10-21 10:25:44+00  2014-10-21 10:25:44+00  ...          1其他
3    2014-10-21 10:27:28+00  2014-10-21 10:27:28+00  ...          1其他
4    2014-10-21 10:30:27+00  2014-10-21 10:30:27+00  ...          1其他
..                      ...                     ...  ...        ...        ...
另一方面,我有一个DatetimeIndex对象,包含许多不相交的日期。非常重要的是要知道,这些日期在日期a和日期B之间并没有形成一个完整的范围,所以两者之间肯定存在“漏洞”,所以我不能简单地应用日期范围

DatetimeIndex(['2014-12-12'、'2014-12-15'、'2014-12-16'、'2014-12-17',
'2014-12-18', '2014-12-19', '2014-12-20', '2014-12-21',
'2015-03-02', '2015-03-03',
...],
dtype='datetime64[ns]',length=xyz,freq=None)
问题来了:我现在需要的是将数据帧的所有行放在DatetimeIndex中没有用日期表示starttime值的地方。h:m:s中的时间是不相关的,因此如果我有一个日期“2014-12-12”和两行“2014-12-12 00:00:55+00”和“2014-12-12 15:10:42+00”都应该包括在内。得到的经过修剪的数据帧还应该包含它以前拥有的所有列

我的第一个迭代方法是将DatetimeIndex的一个日期接一个日期,遍历Dataframe的所有行,如果该行在同一天,则将其复制到一个新的框架中,但我认为必须有更好的方法,因为如果数据帧的行太多,我显然会遇到严重的性能问题。

删除时间依据、比较依据和筛选依据:

详细信息

print (df['starttime'].dt.floor('D'))
0   2015-10-11 00:00:00+00:00
1   2015-10-11 00:00:00+00:00
2   2014-10-21 00:00:00+00:00
3   2014-10-21 00:00:00+00:00
4   2014-10-21 00:00:00+00:00
Name: starttime, dtype: datetime64[ns, UTC]

print (df['starttime'].dt.floor('D').isin(idx))
0     True
1     True
2    False
3    False
4    False
Name: starttime, dtype: bool

给人印象深刻的我真的学到了很多,非常感谢!如果你对工具集足够了解的话,熊猫有时似乎有很简单的答案
print (df['starttime'].dt.floor('D'))
0   2015-10-11 00:00:00+00:00
1   2015-10-11 00:00:00+00:00
2   2014-10-21 00:00:00+00:00
3   2014-10-21 00:00:00+00:00
4   2014-10-21 00:00:00+00:00
Name: starttime, dtype: datetime64[ns, UTC]

print (df['starttime'].dt.floor('D').isin(idx))
0     True
1     True
2    False
3    False
4    False
Name: starttime, dtype: bool