Вы можете использовать merge_asof
. Это позволяет найти последний индекс меньше, чем искомое значение, которое вам нужно. Таким образом, чтобы найти часовой пояс, когда вы нашли IP-номер, используйте:
tmp = pd.merge_asof(pd.DataFrame([ip_number], columns=['ip']), df, left_on=['ip'],
right_on=['ip1'])
tmp = tmp[tmp.ip2>ip_number]
if len(tmp) > 0:
tz = tmp.at[0, 'timezone']
else:
tz = '' # not found
В качестве альтернативы вы можете использовать searchsorted
:
ix = df['ip2'].searchsorted([ip_number], 'right')[0]
if ix == len(df) or df.at[ix, 'ip1']>ip_number:
tz = '' # not found:
else:
tz = df.at[ix, 'timezone']