IP地址增加1,取决于子网的值(在不同列上)

问题描述 投票:0回答:1

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

        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(和/或上一个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

如何实现?

谢谢!

pandas add ip-address
1个回答
0
投票
尝试一下。

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
© www.soinside.com 2019 - 2024. All rights reserved.