Эквивалент панд SQL не равно - PullRequest
0 голосов
/ 29 мая 2018

Итак, у меня есть 2 фрейма данных, которые я хотел бы объединить.

Я объединяю 3 столбца, легко объединить 2.

joined_df = pd.merge(df1, df2, how='left', on=['name', 'city'])

Iхочу, чтобы это использовалось в третьем столбце, но это будет сравнение, что-то вроде этого:

joined_df = pd.merge(df1, df2, how='left',
on=['name', 'city', 'df1.year' >= 'df2.year_min'])

Не уверен, какой правильный синтаксис здесь.

Если это был SQL,это было бы легко для меня.

SELECT * FROM df1
JOIN df2 on (df1.name = df2.name and df1.year = df2.year and df1.year > df2.year_min)

Любая помощь?

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Вы можете использовать merge_asof, по умолчанию обратное слияние

pd.merge_asof(df1,df2, left_on='year',right_on='joined_df', by=['name', 'city'])
0 голосов
/ 29 мая 2018

Панды merge поддерживает только равные соединения.Вам нужно будет добавить второй шаг, который фильтрует результат, примерно так:

joined_df = df1.merge(df2, how='left', on=['name', 'city'])
joined_df = joined_df[joined_df.year > joined_df.year_min]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...