根据子网的值(在不同的列上)将 IP 地址增加 1

Increment IP address by 1 depending on value of subnet (on different column)

我有这个 DF,由 ipaddress 类型的对象组成。

        subnet
0  10.204.26.0
1  10.204.26.0
2  10.204.26.0
3  10.204.30.0
4  10.204.30.0
5  10.204.30.0
6  10.204.30.0
7  10.204.30.0
8  10.204.30.0
9  10.204.30.0

我想创建一个新列,比如 df['ip'],它将在 subnet(and/or 之前的 row)上递增,以获得每个不同的地址行,但考虑到子网确实不同。

如果子网只有一个,那么df['ip'] = df.index + df[subnet] + 1就很容易解决问题。那会产生这样的东西:

        subred            ip
0  10.204.26.0   10.204.26.1
1  10.204.26.0   10.204.26.2
2  10.204.26.0   10.204.26.3

但由于子网可能不止一个,因此预期结果将是:

        subred            ip
0  10.204.26.0   10.204.26.1
1  10.204.26.0   10.204.26.2
2  10.204.26.0   10.204.26.3
3  10.204.30.0   10.204.30.1
4  10.204.30.0   10.204.30.2
5  10.204.30.0   10.204.30.3
6  10.204.30.0   10.204.30.4
7  10.204.30.0   10.204.30.5
8  10.204.30.0   10.204.30.6
9  10.204.30.0   10.204.30.7

如何实现?

谢谢!

试试这个。

df['ip']= df['subnet'].str[:10]+ (df.groupby('subnet').cumcount()+1).astype(str)
df

输出

         subnet     ip
0   10.204.26.0     10.204.26.1
1   10.204.26.0     10.204.26.2
2   10.204.26.0     10.204.26.3
3   10.204.30.0     10.204.30.1
4   10.204.30.0     10.204.30.2
5   10.204.30.0     10.204.30.3
6   10.204.30.0     10.204.30.4
7   10.204.30.0     10.204.30.5
8   10.204.30.0     10.204.30.6
9   10.204.30.0     10.204.30.7