【问题标题】:Python pandas - How do I merge two data frames based on dates that are not consistent in both?Python pandas - 如何根据两者不一致的日期合并两个数据框?
【发布时间】:2020-07-30 15:38:49
【问题描述】:

我目前有两个非常大的数据集:

df1

                    created_at  PM1.0_CF1_ug/m3  ...  PM2.5_ATM_ug/m3  Unnamed: 9
0    2019-08-08 18:00:00+00:00             4.46  ...             8.78         NaN
1    2019-08-08 19:00:00+00:00             0.00  ...             0.00         NaN

df2

                    created_at  REF
0    2019-08-08 17:00:00+00:00             1.08
1    2019-08-08 18:00:00+00:00            84.31

df1 中给出的 created_at 值并非全部都出现在 df2 中,这是一个较小的数据帧比第一个。

我想做的是根据 df2 中给出的created_at 值合并/加入两个表,并在合并后的列中有一个REF仅显示在 df2 中的日期的表格。

这是我想要的示例:

                    created_at  PM1.0_CF1_ug/m3  ...  PM2.5_ATM_ug/m3  Unnamed: 9         REF
0    2019-08-08 18:00:00+00:00             4.46  ...             8.78         NaN       84.31
1    2019-08-08 19:00:00+00:00             0.00  ...             0.00         NaN         NaN

也许可以在 SQL 中执行此操作,然后将其转换为 pandas DF,但是我熟悉 SQL 连接。

谢谢!

【问题讨论】:

  • 你试过用pandas merge?
  • df1.merge(df2, on='created_at', how='left', indicator=True)?

标签: mysql python-3.x pandas numpy dataframe


【解决方案1】:

您应该查看pd.merge_asof 并指定容差。或者,仅合并日期而不是日期时间。

【讨论】:

    【解决方案2】:

    在 SQL 中,您通常会使用 left join 来选择从 df2 中获取匹配行:

    select df1.*, df2.ref
    from df1
    left join df2 on df2.created_at = df1.created_at
    

    df2 中没有匹配项时,ref 列将在结果集中显示为null

    【讨论】:

      猜你喜欢
      • 2021-10-02
      • 2021-10-05
      • 1970-01-01
      • 2021-10-24
      • 2016-01-30
      • 1970-01-01
      • 2016-01-06
      • 2016-10-08
      相关资源
      最近更新 更多