我有 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")
感谢您的时间。
答案 0 :(得分:1)
您正在寻找的是这里的内连接。您还需要向连接键添加年、月、日和小时。以下应该给你正确的答案:
df1.merge(df2, on=["plant_name", "year", "month", "day", "hour"], how="inner")