pandas - 结合 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")
感谢您的时间。
解决方案
您正在寻找的是这里的内部连接。您还需要在加入键中添加年、月、日和小时。以下应该给你正确的答案:
df1.merge(df2, on=["plant_name", "year", "month", "day", "hour"], how="inner")
推荐阅读
- android - 分析后增加 android 应用程序构建时间
- node.js - 粘性会话如何工作?
- java - 定义一个称为“NO Match Exception”的异常,当字符串不等于“India”时抛出该异常
- angular - 为什么在 Angular 打字稿应用程序的 Jasmine 测试期间,primeng 对话框为空
- javascript - ReactJS 中大型 json 结构的滞后输入
- google-chrome - ssl 和 chrome: err_ssl_protocol_error 不时用 f5 修复
- tensorflow2.0 - 无法让 GradientTape 给出非空结果
- matlab - fprintf 在 MATLAB 中没有按预期工作
- jquery - 严格的 Ajax 实时数据搜索结果
- python-3.x - 如何使用 wx.GenericMessageDialog?