gpt4 book ai didi

python - Pandas 两个数据帧在 CIDR 中查找 IP 并在 CIDR 列中映射

转载 作者:行者123 更新时间:2023-12-01 08:20:54 35 4
gpt4 key购买 nike

我有 2 个数据框。 One(df1) 具有 CIDR 和一列,该列始终为 1 以丰富第二个数据帧。另一个数据帧(df2)有一个 ip 列表。我想可能通过 df1 中的 CIDR 迭代 IP,并标记 df2(如果它在其中)。我已经阅读了 ipaddressnetaddr 库的文档,并且过去使用过这两个库,但我无法弄清楚如何在这种情况下使用一个库。

如果您获得 cidr 13.64.0.0/11 的范围,您将获得 13-64.0.0-13.95.255.255。 13.64.1.100 属于该范围

数据框:

df1
CIDR inCIDR
0 13.64.0.0/11 1
1 13.96.0.0/13 1
2 13.104.0.0/14 1
3 20.34.0.0/15 1
4 20.36.0.0/14 1
5 20.40.0.0/13 1
6 20.128.0.0/16 1
7 20.140.0.0/15 1
8 20.144.0.0/14 1
9 20.160.0.0/12 1
10 20.176.0.0/14 1
11 20.180.0.0/14 1
12 20.184.0.0/13 1
13 23.96.0.0/13 1
14 40.64.0.0/10 1
15 42.159.0.0/16 1

df2
ipaddress
0 18.235.100.252
1 13.64.1.100
2 40.64.11.22
3 184.84.243.59
4 184.84.243.119
5 20.180.22.12
6 3.17.7.58
7 34.233.202.21
8 42.159.10.10

期望的输出:

df2
ipaddress inCIDR
0 18.235.100.252 0
1 13.64.1.100 1
2 40.64.11.22 1
3 184.84.243.59 0
4 184.84.243.119 0
5 20.180.22.12 1
6 3.17.7.58 0
7 34.233.202.21 0
8 42.159.10.10 1

可能使用映射来分配 inCIDR,例如:

df2['inCIDR'] = df2['ipaddress'].map(df1.set_index('ipaddress')['inCIDR']).fillna(0).astype(int)

最佳答案

如果您需要根据 ipaddress 中的前两个值映射值

new_df = df1.copy()
new_df['CIDR'] = new_df['CIDR'].str.extract('(\d+.\d+).')

df2['inCIDR'] = df2['ipaddress'].str.extract('(\d+.\d+).')[0].map(new_df.set_index('CIDR')['inCIDR']).fillna(0).astype(int)

ipaddress inCIDR
0 18.235.100.252 0
1 13.64.1.100 1
2 40.64.11.22 1
3 184.84.243.59 0
4 184.84.243.119 0
5 20.180.22.12 1
6 3.17.7.58 0
7 34.233.202.21 0
8 42.159.10.10 1

关于python - Pandas 两个数据帧在 CIDR 中查找 IP 并在 CIDR 列中映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54654943/

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