Как сравнить столбцы даты в двух разных фреймах данных на основе одного и того же идентификатора - PullRequest
0 голосов
/ 22 сентября 2018

панд

У меня есть два фрейма данных, и я хочу сделать вложенный цикл.

Я хочу перебрать каждую строку из df1 и выбрать col1 (id) и col2.

Затем он возьмет идентификатор и перебирает df2 и проверяет, имеет ли строка тот же идентификатор, а затем сравнивает столбец даты из df1 со столбцом даты в df2

, если col2 в df1 меньше, чем col2 вdf2, он вернет 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 голосов
/ 22 сентября 2018

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...