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

如何基于另一个DataFrame的时间列过滤当前DataFrame的行?

问题描述

现有包含时间格式数据的DataFrame df,数据如下:

Time lat lon
1/10/2022 11:30 22.12 113.15
1/10/2022 11:32 22.13 113.14
1/10/2022 11:45 22.15 113.19
1/10/2022 12:01 22.11 113.13
1/10/2022 12:11 22.17 113.19

已执行以下代码将Time列转换为时间格式:

df['Time']= pd.to_datetime(df['Time'])
df['Time'] = df['Time'].dt.time

指定时间存储在另一个DataFrame dates 中,相关代码如下:

timeList = {'Time': ['1/10/2022 11:30', '1/10/2022 11:45', '1/10/2022 12:01']}
dates = pd.DataFrame(data=timeList)
dates['Time'] = pd.to_datetime(dates.stack(), format='%d/%m/%Y %H:%M').unstack()
dates['Time'] = dates['Time'].dt.time

需要筛选出df中Time列值存在于dates中的行,误以为isin()仅适用于列表,求简便实现方法。预期结果如下:

Time lat lon
1/10/2022 11:30 22.12 113.15
1/10/2022 11:45 22.15 113.19
1/10/2022 12:01 22.11 113.13
解决方案

isin()方法完全支持直接传入Series对象,不需要额外转换为列表,直接用以下代码即可完成筛选:

filtered_df = df[df['Time'].isin(dates['Time'])]

执行后filtered_df就是符合预期的结果。

另外补充一个优化思路:如果不需要单独保留dates数据,可直接将目标时间转换为时间格式列表后传入,代码更简洁:

target_times = pd.to_datetime(
    ['1/10/2022 11:30', '1/10/2022 11:45', '1/10/2022 12:01'],
    format='%d/%m/%Y %H:%M'
).time
filtered_df = df[df['Time'].isin(target_times)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:30:57