我有一个由两个类型为
pd.Timestamp
的元素组成的列表,例如:
intervals = [
[pd.Timestamp('2023-01-01 02:00:00'), pd.Timestamp('2023-01-01 03:00:00')],
[pd.Timestamp('2023-01-01 05:00:00'), pd.Timestamp('2023-01-01 07:00:00')],
[pd.Timestamp('2023-01-01 07:30:00'), pd.Timestamp('2023-01-01 08:00:00')],
]
我还有一个示例数据框,例如:
data = {'value': [1, 2, 3, 4]}
index = [
pd.Timestamp('2023-01-01 01:00:00'),
pd.Timestamp('2023-01-01 02:00:00'),
pd.Timestamp('2023-01-01 03:00:00'),
pd.Timestamp('2023-01-01 04:00:00'),
]
df = pd.DataFrame(data, index=index)
现在,如何检查数据帧的索引是否在所有日期时间间隔内? 我的想法是:
我希望以矢量化方式执行 1 和 2,因此我想尽可能使用 numpy 或 pandas。目前我正在使用列表管理 Python 中的数据结构。哪一种是最快的方法,哪一种也是最优雅的方法?
IntervalIndex
:
idx = pd.IntervalIndex.from_tuples(list(map(tuple, intervals)))
out = (idx.get_indexer_for(df.index) != -1).all()
输出:
False
工作原理:
idx.get_indexer_for(df.index)
# array([-1, -1, 0, -1])
# check if values are found
idx.get_indexer_for(df.index) != -1
# array([False, False, True, False])
# are all values found?
(idx.get_indexer_for(df.index) != -1).all()
# False