Слияние двух df на основе дат, если между некоторым диапазоном и средним значениями - PullRequest
1 голос
/ 15 апреля 2020
    df_A
    start_date  end_date
0   2017-03-01  2017-04-20
1   2017-03-20  2017-04-27
2   2017-04-10  2017-05-25
3   2017-04-17  2017-05-22

    df_B
    event_date  price
0   2017-03-15  100
1   2017-02-22  200
2   2017-04-30  100
3   2017-05-20  150
4   2017-05-23  150

Результат

    start_date  end_date        avg.price
0   2017-03-01  2017-04-20      100.0
1   2017-03-20  2017-04-27      
2   2017-04-10  2017-05-25      133.3
3   2017-04-17  2017-05-22      125

1 Ответ

0 голосов
/ 15 апреля 2020

Один из способов, если ваши фреймы данных невелики, - это использовать декартово произведение и фильтровать фреймы данных.

mapper = df_A.assign(key=1).merge(df_B.assign(key=1))\
             .query('start_date <= event_date <= end_date')\
             .groupby('start_date')['price'].mean()
df_A['avg.price'] = df_A['start_date'].map(mapper)
print(df_A)

Вывод:

  start_date   end_date   avg.price
0 2017-03-01 2017-04-20  100.000000
1 2017-03-20 2017-04-27         NaN
2 2017-04-10 2017-05-25  133.333333
3 2017-04-17 2017-05-22  125.000000

В противном случае см. этот пост

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...