首页 > 解决方案 > 减少将 2 个数据帧合并到一起而丢失的数据量 pandas

问题描述

我问了这个问题:我问了这个问题,但是我没有考虑到另一个问题。Date2 必须在 Date1 之前。由于我认为预期的输出会使它更加明显。这是问题:我有 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
...

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

那么在不使用 df1 的情况下我该怎么做呢?

答案是这样的:

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",
    ).dropna(subset=["date2"])
)

当我运行这个时,那里产生了 NaN 的分配(即使没有原因),导致我丢失了 60% 的数据。我将如何编辑该方法以减少产生和丢弃的 NaN 数量,以免丢失大量数据?

标签: pythonpandasdataframe

解决方案


您应该尝试使用 pandas merge_asof 中的参数“direction”。然后,我不知道在这种情况下它是否可以帮助您,但是您也可以使用 dropna() 中的 'thresh' 参数。


推荐阅读