【问题标题】:Python Pandas Merge Two Dataframes Based on Another Correspondence DataframePython Pandas 基于另一个对应数据框合并两个数据框
【发布时间】:2021-12-16 11:13:20
【问题描述】:

我正在使用 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 

数据框2:

     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。这两个数据帧中的间隔都是 1 小时。

预期结果:

     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}})

【问题讨论】:

    标签: python pandas dataframe join merge


    【解决方案1】:

    使用Series.mapSite 映射到Sensor,然后将DataFrame.merge 映射到SensorTime

    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
    

    【讨论】:

    • 谢谢丹妮!顺便说一句,如果 df2 中没有 13:00 传感器数据,有没有办法我们可以在输出中保留第 1 行和第 3 行,并且在没有数据单元格中保留 NaN?
    • @ElaineYang 刚看到这个,我不确定从那以后没有办法找到合并数据帧的对应关系,我猜你可以填写 nan
    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 2018-03-14
    相关资源
    最近更新 更多