На мой взгляд, у нас есть три варианта:
%timeit df['Host'] + "/" + df['Protocol'] + "/" + df['Port'].map(str)
%timeit ['/'.join(i) for i in zip(df['Host'],df['Protocol'],df['Port'].map(str))]
%timeit ['/'.join(i) for i in df[['Host','Protocol','Port']].astype(str).values]
Задержка
10 loops, best of 3: 39.7 ms per loop
10 loops, best of 3: 35.9 ms per loop
10 loops, best of 3: 162 ms per loop
Каким бы медленным я не думал, что это будет ваш самый читаемый подход:
import pandas as pd
data = '''\
ID,Host,Protocol,Port
1,10.0.0.10,tcp,445
1,10.0.0.10,tcp,445
1,10.0.0.10,tcp,445
1,10.0.0.10,tcp,445
1,10.0.0.10,tcp,445
1,10.0.0.10,tcp,445
1,10.0.0.10,tcp,445
1,10.0.0.10,tcp,49707
1,10.0.0.10,tcp,49672
1,10.0.0.10,tcp,49670'''
df = pd.read_csv(pd.compat.StringIO(data)) # Recreates a sample dataframe
cols = ['Host','Protocol','Port']
newcol = ['/'.join(i) for i in df[cols].astype(str).values]
df = df.assign(HostAffected=newcol).drop(cols, 1)
print(df)
Возвращает:
ID HostAffected
0 1 10.0.0.10/tcp/445
1 1 10.0.0.10/tcp/445
2 1 10.0.0.10/tcp/445
3 1 10.0.0.10/tcp/445
4 1 10.0.0.10/tcp/445
5 1 10.0.0.10/tcp/445
6 1 10.0.0.10/tcp/445
7 1 10.0.0.10/tcp/49707
8 1 10.0.0.10/tcp/49672
9 1 10.0.0.10/tcp/49670