Рассмотрим следующие панды:
df1:
user_id create_at
0 1 2023-01-01
1 1 2023-01-02
2 2 2023-01-01
3 2 2023-01-03
4 2 2023-01-05
df2:
user_id withdrawal_request_date
0 1 2023-01-03
1 2 2023-01-02
2 3 2023-01-01
Я хочу выполнить merge_asof НО когда я это сделаю, я потеряю пользователя с user_id=3. Его нет в df1, поэтому я его теряю, как вы видите ниже:
pd.merge_asof(df1.sort_values('create_at'),
df2.sort_values('withdrawal_request_date'),
by = 'user_id',
left_on = 'create_at',
right_on = 'withdrawal_request_date',
direction = 'forward')
user_id create_at withdrawal_request_date
0 1 2023-01-01 2023-01-03
1 2 2023-01-01 2023-01-02
2 1 2023-01-02 2023-01-03
3 2 2023-01-03 NaT
4 2 2023-01-05 NaT
Однако я бы хотел оставить его в окончательном фрейме данных. Ожидаемый результат должен выглядеть так:
user_id create_at withdrawal_request_date
0 1 2023-01-01 2023-01-03
1 2 2023-01-01 2023-01-02
2 1 2023-01-02 2023-01-03
3 2 2023-01-03 NaT
4 2 2023-01-05 NaT
5 3 NaT 2023-01-01
ПРИМЕЧАНИЕ, что мой набор данных огромен: тысячи пользователей выполняют большую активность, поэтому что-то вроде внешнего соединения здесь не сработает.< /p>
Есть идеи?
ДАННЫЕ
df1 = pd.DataFrame({
'user_id': [1, 1, 2, 2, 2],
'create_at': pd.to_datetime(['2023-01-01', '2023-01-02', '2023-01-01', '2023-01-03', '2023-01-05'])
})
df2 = pd.DataFrame({
'user_id': [1, 2, 3],
'withdrawal_request_date': pd.to_datetime(['2023-01-03', '2023-01-02', '2023-01-01'])
})
Подробнее здесь: https://stackoverflow.com/questions/788 ... ing-values