首页 > 解决方案 > 结合 2 个不等长的日期 Pandas

问题描述

我有 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")

感谢您的时间。

标签: pandasdatejoinmergeconcatenation

解决方案


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

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

推荐阅读