首页 > 解决方案 > 获取其他数据框熊猫中日期最近的行

问题描述

我有2个数据框Dataframe1:

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

和数据框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
...

我想要做的是从 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

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

标签: pythonpandasdataframe

解决方案


尝试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"])
)

推荐阅读