【问题标题】:Get row with closest date in other dataframe pandas获取其他数据框熊猫中日期最近的行
【发布时间】:2021-06-16 14:36:20
【问题描述】:

我有 2 个数据框 数据框1:

id date1
1 11-04-2022
1 03-02-2011
2 03-05-2222
3 01-01-2001
4 02-02-2012

和Dataframe2:

id date2 data data2
1 11-02-2222 1 3
1 11-02-1999 3 4
1 11-03-2022 4 5
2 22-03-4444 5 6
2 22-02-2020 7 8
...

我想要做的是从 dataframe2 中取出与 Dataframe1 中 date1 最接近的行,但它必须适合 id,但日期必须在 date1 之前 所需的输出如下所示:

id date1 date2 data data2
1 11-04-2022 11-03-2022 4 5
1 03-02-2011 11-02-1999 3 4
2 03-05-2222 22-02-2020 7 8

我将如何使用 pandas 来做到这一点?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    尝试pd.merge_asof,但首先将 date1、date2 转换为 datetime 并对两个时间范围进行排序:

    df1["date1"] = pd.to_datetime(df1["date1"])
    df2["date2"] = pd.to_datetime(df2["date2"])
    
    df1 = df1.sort_values(by="date1")
    df2 = df2.sort_values(by="date2")
    
    print(
        pd.merge_asof(
            df1,
            df2,
            by="id",
            left_on="date1",
            right_on="date2",
            direction="nearest",
        ).dropna(subset=["date2"])
    )
    

    【讨论】:

    • 感谢您的回答,但我将如何做到这一点,以便它选择具有最接近 date1 的 date2 的东西,但 date2
    • @jr123456jr987654321 尝试更改direction= 参数(根据需要更改为“向后”或“向前”。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 2019-04-08
    • 2014-06-04
    • 1970-01-01
    • 2018-05-12
    • 2019-02-26
    • 2014-10-30
    相关资源
    最近更新 更多