结合 2 个不等长的日期熊猫

时间:2021-06-11 11:51:24

标签: pandas date join merge concatenation

我有 2 个不等长的熊猫,我试图根据它们匹配的小时、月、年和植物名称来组合它们。我不确定 merge/concat/join 是最有效还是使用更少的内存,因为我的实际数据集非常大,而且我通过尝试获得了意外的结果,如此处底部所示。例如,对于数据帧 1 (df1),我的数据如下所示:

    plant_name business_name maint_region_name wind_speed_ms dataset  year  month  day  hour
0    CAETITE I        BRAZIL            BRAZIL          7.88    ERA5  2021      5   31    21
1    CAETITE I        BRAZIL            BRAZIL          7.95    ERA5  2021      5   31    20
2  RIO DO FOGO        BRAZIL            BRAZIL          7.72    ERA5  2021      1   31    19
3  RIO DO FOGO        BRAZIL            BRAZIL          7.68    ERA5  2021      1   31    18
4    CAETITE I        BRAZIL            BRAZIL          7.41    ERA5  2021      1   31    17
5    CAETITE I        BRAZIL            BRAZIL          7.32    ERA5  2021      1   31    16

并且,数据框 2 或 df2:

  plant_name       vel  year  month  day  hour  
0  CAETITE I       NaN  2021      1   31    19
1  CAETITE I       NaN  2021      1   31    18
2  CAETITE I      5.42  2021      1   31    17
3  CAETITE I       NaN  2021      1   31    16

并且,最终的 df 或 df_combined 应如下所示:

    plant_name business_name maint_region_name wind_speed_ms dataset year month day hour  vel
0    CAETITE I        BRAZIL            BRAZIL          7.41    ERA5 2021     1  31   17 5.42
1    CAETITE I        BRAZIL            BRAZIL          7.32    ERA5 2021     1  31   16  NaN

我在下面尝试了很多这样的事情,但每次尝试都会导致“df3”在我的实际数据中的行数和列数比我预期的要多得多,所以我一定在下面的方法中做错了:

df3 = df2.merge(df1[["plant_name","year","month","day","hour","wind_speed_ms"]], on=["plant_name"], how="left")

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

您正在寻找的是这里的内连接。您还需要向连接键添加年、月、日和小时。以下应该给你正确的答案:

df1.merge(df2, on=["plant_name", "year", "month", "day", "hour"], how="inner")