我有这个由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
如何实现?
谢谢!
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