首页 > 解决方案 > 如何根据相同的 ID 比较两个不同数据框中的日期列

问题描述

熊猫

我有两个数据框,想做一个嵌套循环。

我想从df1迭代每一行并选择col1(id)和col2。

然后,它将获取 ID 并遍历 df2 并检查该行是否具有相同的 ID,然后将 df1 中的日期列与 df2 中的日期列进行比较

如果 df1 中的 col2 小于 df2 中的 col2,它将返回 True 并将其附加到 df1 的行。

基本上我想做的是,或者,如果有更快的方法

for(row : df1){
    for(row : df2){
        if (df1.row[col1] == df2.row[col1]){
            if(df1.row[col2] < df2.row[col2])
                return df1.row[col3] == True
             else
                row[col3] == False


df1
col1     col2          col3      col4
01       01/01/2018     S         True
02       11/21/2018     F         False
03       04/03/2018     C         True

df2
col1    col2           col3
01      10/01/2018       A
02      01/01/2018       A
02      01/31/2018       F
02      10/01/2018       D
02      09/01/2018       V
03      02/01/2018       W
03      07/01/2018       X

标签: pythonpandasloopsdataframeif-statement

解决方案


pandas.merge_asof

首先,为了merge_asof工作,您需要按日期排序

df1.sort_values(['col2', 'col1'], inplace=True)
df2.sort_values(['col2', 'col1'], inplace=True)

现在我们可以合并

pd.merge_asof(
    df1, df2.rename(columns={'col3': 'col4'}),
    on='col2', by='col1', direction='forward'
).assign(col4=lambda d: d.col4.notna())

   col1       col2 col3   col4
0     1 2018-01-01    S   True
1     3 2018-04-03    C   True
2     2 2018-11-21    F  False

推荐阅读