如何基于关联DataFrame实现Pandas两个DataFrame按时间字段合并
Pandas 三表关联合并解决方案
需求梳理
当前需要合并三类DataFrame数据:
- 停车场站点数据表(df1):存储不同停车场各时段的空余车位数、总容量数据
- 传感器采集数据表(df2):存储不同传感器各时段的温度、降水量监测数据
- 关联映射表(cor_df):记录停车场站点与部署传感器的一一对应关系
合并规则:先通过关联映射表绑定站点与传感器的对应关系,再匹配两个业务表的1小时间隔时间字段,最终输出对齐后的全量数据。
实现代码
# 1. 先将停车场数据表与关联映射表按站点ID(Site)合并,为每个停车场记录绑定对应的传感器ID df1_bound = pd.merge(df1, cor_df, on='Site', how='inner') # 2. 再将绑定完传感器的停车场数据与传感器表按【传感器ID+时间】双字段合并,确保时间维度完全对齐 result_df = pd.merge(df1_bound, df2, on=['Sensor', 'Time'], how='inner')
如果需要保留两个来源的Time字段(和你给出的预期输出格式完全一致),可以提前对其中一个表的Time字段重命名后再合并:
# 重命名传感器表的时间字段避免合并后自动去重 df2 = df2.rename(columns={'Time': 'Time_sensor'}) # 第一步合并关联映射表 df1_bound = pd.merge(df1, cor_df, on='Site', how='inner') # 第二步仅按Sensor字段合并后过滤时间一致的记录 result_df = pd.merge(df1_bound, df2, on='Sensor', how='inner') result_df = result_df[result_df['Time'] == result_df['Time_sensor']].reset_index(drop=True)
参数说明
- 合并方式
how='inner'表示仅保留同时在两个表中存在匹配关系的记录,如果你需要保留全部停车场/全部传感器的记录,可以调整为how='left'/how='right',无匹配的字段会自动填充空值 - 双字段关联
on=['Sensor', 'Time']是合并的核心逻辑,能直接保证传感器数据的时间点与停车场数据的时间点完全对齐,无需额外过滤
内容的提问来源于stack exchange,提问作者Elaine Yang
相关产品推荐
相关产品推荐

