如何用日期索引的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
相关产品推荐
相关产品推荐

