如何基于另一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
相关产品推荐
相关产品推荐

