Python Pandas 基于另一个对应数据帧合并两个数据帧

Python Pandas Merge Two Dataframes Based on Another Correspondence Dataframe

我正在处理 2 个数据帧。 Dataframe1 用于停车场。 Dataframe2 用于传感器。对应数据框显示哪个传感器在哪个站点。

数据框 1:

     Site   Time   Available   Capacity
0    19E    12:00  5           10
1    19E    13:00  4           10 
2    44E    12:00  8           22 
3    44E    13:00  11          22 

Dataframe2:

     Sensor   Time   Temp   Precipitation
0    113      12:00  74     0.01
1    113      13:00  76     0.02 
2    114      12:00  75     0.00 
3    114      13:00  77     0.00 

通讯数据框:

     Site   Sensor  
0    19E    113
1    44E    114
2    58E    115
... 

我想根据对应数据帧以及“时间”列合并数据帧 1 和 2。这两个数据帧的间隔均为 1h。

预期结果:

     Site   Time   Available   Capacity   Sensor   Time   Temp   Precipitation
0    19E    12:00  5           10         113      12:00  74     0.01
1    19E    13:00  4           10         113      13:00  76     0.02
2    44E    12:00  8           22         114      12:00  75     0.00
3    44E    13:00  11          22         114      13:00  77     0.00 

您可以使用以下代码生成原材料:

import pandas as pd

df1 = pd.DataFrame({
    'Site': {0: '19E', 1: '19E', 2: '44E', 3: '44E'},
    'Time': {0: '12:00', 1: '13:00', 2: '12:00', 3: '13:00'},
    'Available': {0: 5, 1: 4, 2: 8, 3: 11},
    'Capacity': {0: 10, 1: 10, 2: 22, 3: 22}})

df2 = pd.DataFrame({
    'Sensor': {0: 113, 1: 113, 2: 114, 3: 114},
    'Time': {0: '12:00', 1: '13:00', 2: '12:00', 3: '13:00'},
    'Tem': {0: 74, 1: 76, 2: 75, 3: 77},
    'Precipitation': {0: 0.01, 1: 0.02, 2: 0.00, 3: 0.00}})

cor_df = pd.DataFrame({
    'Site': {0: '19E', 1: '44E', 2: '58E'},
    'Sensor': {0: 113, 1: 114, 2: 115}})

SensorTime 上使用 Series.map to map Site to Sensor and then DataFrame.merge

lookup = cor_df.set_index("Site").squeeze()
res = df1.assign(Sensor=df1["Site"].map(lookup)).merge(df2, on=["Sensor", "Time"])
print(res)

输出

  Site   Time  Available  Capacity  Sensor  Tem  Precipitation
0  19E  12:00          5        10     113   74           0.01
1  19E  13:00          4        10     113   76           0.02
2  44E  12:00          8        22     114   75           0.00
3  44E  13:00         11        22     114   77           0.00