我如何基于相同的ID比较两个不同数据框中的日期列

时间:2018-09-21 22:01:21

标签: python pandas loops dataframe if-statement

熊猫

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

我要迭代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

1 个答案:

答案 0 :(得分:0)

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