У меня есть два dfs:
df1:
no1 no2 other1
1 10 foo
1 50 foo
1 60 cat
1 70 cat
3 12 cat
df2:
no1 start stop other2
1 2 40 dog
1 100 200 dog
3 5 15 dog
Я хочу объединить df1
и df2
на следующих условиях:
1) столбец № 1 совпадает, если это правда, то
2) df1['no2']
находится между df2['start']
и df2['stop']
:
Желаемый вывод для приведенного выше примера будет (не нужны столбцы start/stop
, нужны все остальные столбцы):
df3:
no1 no2 other1 other2
1 10 foo dog
3 12 cat dog
Мое проверенное решение (замысловатое, возможно, не самое эффективное): я подумал, что np.where
может сделать это для меня, используя приведенный ниже код, а затем отбросить все строки, где df['merge'] = no
. Но это дает мне ошибку Can only compare identically-labeled Series objects
, которая, я думаю, связана с тем, что dfs имеют разные размеры. Эффективность / скорость важны, поэтому я думаю, что это не тот путь, даже если бы я мог устранить ошибку.
df2['merge'] = np.where((df1['no1'] == df2['no1'] & df2['start'] < df1['no2'] < df2['stop']), yes, no)