Use pd.IntervalIndex
In [2503]: s = pd.IntervalIndex.from_arrays(dfb.lowerbound_ip_address,
dfb.upperbound_ip_address, 'both')
In [2504]: dfa.assign(country=dfb.set_index(s).loc[dfa.ip_address].country.values)
Out[2504]:
ip_address country
0 13 China
1 5 Australia
2 20 China
3 11 China
Details
In [2505]: s
Out[2505]:
IntervalIndex([[0, 10], [11, 20]]
closed='both',
dtype='interval[int64]')
In [2507]: dfb.set_index(s)
Out[2507]:
lowerbound_ip_address upperbound_ip_address country
[0, 10] 0 10 Australia
[11, 20] 11 20 China
In [2506]: dfb.set_index(s).loc[dfa.ip_address]
Out[2506]:
lowerbound_ip_address upperbound_ip_address country
[11, 20] 11 20 China
[0, 10] 0 10 Australia
[11, 20] 11 20 China
[11, 20] 11 20 China
Setup
In [2508]: dfa
Out[2508]:
ip_address
0 13
1 5
2 20
3 11
In [2509]: dfb
Out[2509]:
lowerbound_ip_address upperbound_ip_address country
0 0 10 Australia
1 11 20 China
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…