gpt4 book ai didi

python - 在范围内合并 Pandas 数据框的最快方法

转载 作者:行者123 更新时间:2023-12-03 20:21:56 24 4
gpt4 key购买 nike

我有一个 dataframe A

    ip_address
0 13
1 5
2 20
3 11
.. ........

和另一个 dataframe B
    lowerbound_ip_address   upperbound_ip_address           country
0 0 10 Australia
1 11 20 China

基于此,我需要在 A 中添加一列以至于
ip_address  country
13 China
5 Australia

我有一个想法,我应该编写定义一个函数,然后在 A 的每一行上调用 map。但是我将如何搜索 B 的每一行。有一个更好的方法吗。

最佳答案

使用 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

细节
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

设置
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

关于python - 在范围内合并 Pandas 数据框的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46179362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com