pandas - самостоятельное присоединение со сравнением дат - PullRequest
0 голосов
/ 05 мая 2020

Учитывая Pandas фрейм данных df

     date         numeric_field
0   2019-06-06       n
1   2019-06-07       n
2   2019-06-08       n

, я хотел бы выполнить самостоятельное соединение по датам и применить функцию к numerical_field.

В SQL я бы сделал что-то вроде:

SELECT a.date,
        FUN(b.numeric_field))) new_field
        FROM df a
        INNER JOIN df b
        ON b.date < a.date 
        WHERE a.date > '2019-06-06'
        AND a.date <= '2019-06-08'
        AND b.date >= '2019-06-06'
        GROUP BY a.date 

результат должен быть:

     date           new_field
0   2019-06-07       fun(n)
1   2019-06-08       fun(n)

1 Ответ

1 голос
/ 05 мая 2020

Самый быстрый способ, который я могу придумать, - это перекрестное слияние и запрос:

df = df.assign(dummy=1)

(df.merge(df, on='dummy', suffixes=['','_r'])
   .query('"2019-06-06"<=date_r<date<="2019-06-08"')       # filter
   .assign(new_field=lambda x: x['numeric_field'].sum())   # replace the function in `lambda`
   [['date','new_field']]
)

Вывод:

         date new_field
3  2019-06-07       nnn
6  2019-06-08       nnn
7  2019-06-08       nnn
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...