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

Python DataFrame多匹配合并:如何关联天气与主机数据?

实现两个DataFrame的多匹配合并

完全可以通过pandas的merge()函数实现你需要的匹配需求,核心是基于**date和ZipCode两个字段**进行关联,将天气数据匹配到对应的每条主机记录上。

步骤示例:

  1. 导入pandas并构造示例DataFrame:
import pandas as pd

# 构造df1:天气数据
df1 = pd.DataFrame({
    'date': ['2022-11-25 00:00:00', '2022-11-25 00:00:15', '2022-11-25 00:00:30'],
    'ZipCode': [123456, 123456, 123456],
    'Weather': [34, 35, 36]
})

# 构造df2:主机数据
df2 = pd.DataFrame({
    'date': ['2022-11-25 00:00:00', '2022-11-25 00:00:00', '2022-11-25 00:00:00',
             '2022-11-25 00:00:15', '2022-11-25 00:00:30', '2022-11-25 00:00:30'],
    'ZipCode': [123456, 123456, 123456, 123456, 123456, 123456],
    'host': ['host1', 'host2', 'host3', 'host1', 'host2', 'host3']
})

# 可选:将date字段转为datetime类型,避免字符串格式不一致导致匹配失败
df1['date'] = pd.to_datetime(df1['date'])
df2['date'] = pd.to_datetime(df2['date'])
  1. 执行合并操作:
# 基于date和ZipCode关联,保留df2所有记录并匹配对应天气数据
merged_df = pd.merge(df2, df1, on=['date', 'ZipCode'], how='left')
  1. 查看合并结果:
print(merged_df)

输出结果与你期望的一致:

date  ZipCode   host  Weather
0 2022-11-25 00:00:00   123456  host1       34
1 2022-11-25 00:00:00   123456  host2       34
2 2022-11-25 00:00:00   123456  host3       34
3 2022-11-25 00:00:15   123456  host1       35
4 2022-11-25 00:00:30   123456  host2       36
5 2022-11-25 00:00:30   123456  host3       36

关键说明:

  • on=['date', 'ZipCode']:指定双关联字段,确保只有同一时间、同一邮编的记录才会匹配
  • how='left':保留df2的所有记录,若df1中无对应数据则Weather字段会显示NaN;如果你的场景中df2的所有date/ZipCode组合都存在于df1,使用how='inner'也可得到相同结果
  • 提前转换date为datetime类型,能避免不同字符串格式(如带时区、不同分隔符)导致的匹配异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:50:54