You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用日期索引的DataFrame筛选带datetime索引的DataFrame

嘿,我来帮你简化这个日期筛选的操作!双重循环确实有点啰嗦,Pandas提供了非常高效的向量化方法来处理这类需求,不用手动写嵌套循环~

方法1:提取日期部分用isin匹配

我们可以直接提取第一个DataFrame索引的日期部分,然后用isin()方法判断这些日期是否存在于第二个DataFrame的索引日期集合中:

import pandas as pd

# 初始化你的两个DataFrame
df = pd.DataFrame({'value':[1,2,3,4,5,6]})
df.index = pd.to_datetime(['2022-01-01 10:00','2022-01-02 13:00','2022-01-07 10:00','2022-01-08 10:00','2022-01-11 10:00','2022-01-12 10:00'])

df_1 = pd.DataFrame({'value':[1,2,3]})
df_1.index = pd.to_datetime(['2022-01-02','2022-01-05','2022-01-07'])

# 生成筛选掩码:提取df索引的日期,判断是否在df_1的索引日期中
mask = df.index.dt.date.isin(df_1.index.date)
# 筛选结果
df_filter = df[mask]
print(df_filter)

运行后得到的结果和你手动循环的完全一致:

value
2022-01-02 13:00:00      2
2022-01-07 10:00:00      3

方法2:截断索引到日期级别再匹配

另一种思路是把第一个DataFrame的datetime索引截断到日期维度(把时间部分转为00:00),然后直接和第二个DataFrame的datetime索引匹配:

# 将df的索引截断为日期(时间部分变为00:00)
df_normalized_index = df.index.normalize()
# 判断是否在df_1的索引中
mask = df_normalized_index.isin(df_1.index)
df_filter = df[mask]

这种方法的好处是不需要额外提取date对象,直接用datetime类型匹配,逻辑更直观。

为什么这两种方法更好?

这两种都是Pandas的向量化操作,底层是用C语言优化过的,比你手动写的Python循环快得多——尤其是当你的DataFrame数据量很大时,效率提升会非常明显,同时代码也更简洁易读,维护起来更方便。

内容的提问来源于stack exchange,提问作者roudan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 18:21:00