获取其他数据框 pandas 中最接近日期的行

jr1*_*321 1 python dataframe pandas

我有 2 个数据框 Dataframe1:

id date1
1 11-04-2022
1 03-02-2011
2 03-05-2222
3 01-01-2001
4 02-02-2012
Run Code Online (Sandbox Code Playgroud)

和数据框2:

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
...
Run Code Online (Sandbox Code Playgroud)

我想做的是从 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
Run Code Online (Sandbox Code Playgroud)

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

And*_*ely 5

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

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"])
)
Run Code Online (Sandbox Code Playgroud)