基于唯一值合并DataFrame:为每一经纬度对匹配小时级时间序列
Pandas双DataFrame按经纬度+时间匹配合并实现方案
前置准备
- 提前将DF1、DF2的
Date字段统一转换为datetime64类型,避免字符串格式差异导致关联匹配失败
实现步骤
- 提取DF2中的唯一经纬度集合
# 去重得到所有唯一经纬度对 unique_geo = DF2[['Latitude', 'Longitude']].drop_duplicates().reset_index(drop=True)
- 拼接唯一经纬度与DF1全量时间,得到基础宽表
核心逻辑为对唯一经纬度和DF1做笛卡尔积,保证每个经纬度都匹配到DF1的全量小时级时间+Shift字段
# pandas 1.2.0及以上版本支持cross参数直接实现笛卡尔积 base_df = unique_geo.merge(DF1, how='cross') # 低版本pandas可使用临时列方案替代 # unique_geo['tmp'] = 1 # DF1['tmp'] = 1 # base_df = unique_geo.merge(DF1, on='tmp').drop('tmp', axis=1)
- 左连接匹配Temp字段
# 以经纬度、日期为关联键左连接DF2,无匹配的Temp自动填充为NaN result_df = base_df.merge(DF2, on=['Latitude', 'Longitude', 'Date'], how='left')
结果校验
执行print(len(result_df))即可验证输出行数为299536,符合预期要求,最终输出的result_df字段顺序可按需调整。
内容的提问来源于stack exchange,提问作者Jesse
相关产品推荐
相关产品推荐

