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

如何基于另一DataFrame的条件筛选目标DataFrame的对应日期数据?

解决按日期关联筛选DataFrame记录的问题

嘿,我来帮你搞定这个问题~你之前用pd.concat直接拼接的思路不对,因为df1和df2的时间粒度、行数都不匹配:df1是同一日期下有多条细粒度记录,df2是每天一条小时级汇总数据,直接按行拼接会导致时间对应错误,自然得不到正确结果。

咱们换个思路,核心是提取日期维度做关联筛选,具体步骤如下:

第一步:把时间列转成datetime类型

首先得把字符串格式的时间转换成pandas能识别的datetime类型,这样才能方便提取日期部分:

import pandas as pd

# 读取原始数据
df1 = pd.read_csv("abc.csv")
df2 = pd.read_csv("xyz.csv")

# 转换时间列为datetime类型
df1['A'] = pd.to_datetime(df1['A'])
df2['C'] = pd.to_datetime(df2['C'])

第二步:从df2中找出D>2的目标日期

先提取df2每条记录的日期部分,然后筛选出D值大于2的日期集合:

# 给df2新增日期列,只保留年-月-日部分
df2['date'] = df2['C'].dt.date

# 筛选D>2的记录,提取唯一日期作为目标日期列表
target_dates = df2[df2['D'] > 2]['date'].unique()

看你的df2数据,符合条件的日期是2019-01-01(D=1333)和2019-01-03(D=1666667),这就是我们要保留的df1记录的日期。

第三步:筛选df1中对应目标日期的记录

同样给df1新增日期列,然后判断每条记录的日期是否在目标日期列表里:

# 给df1新增日期列
df1['date'] = df1['A'].dt.date

# 筛选符合条件的记录,最后可以删掉临时的date列(可选)
final_data = df1[df1['date'].isin(target_dates)].drop('date', axis=1)

# 查看结果
print(final_data)

预期输出

运行后你会得到和期望一致的结果:

A           B
0 2019-01-01 03:56:29  197.199997
1 2019-01-01 04:02:29  197.186142
4 2019-01-03 11:52:29  196.100006
5 2019-01-03 12:00:30  196.015961

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:57:30