Как я могу добавить значения списка к значению столбца, используя функцию apply и функцию lambda? - PullRequest
2 голосов
/ 30 сентября 2019

Я хочу добавить значения в столбце из значений списков с помощью функции apply и лямбда-функции

Я уже пытался использовать 'for', но затратил много времени, потому что есть много строк (более 60 000).

например, если «тип_соединения» равен «snmpgetattack», тип «атаки» должен быть «R2L».

image

dos = ['udpstorm', 'apache2', 'mailbomb', 'back', 'neptune', 'land',
       'smurf', 'teardrop', 'processtable', 'pod']


probe = ['satan', 'nmap', 'portsweep', 'mscan', 'ipsweep', 'saint']


r2l = ['httptunnel', 'ftp_write', 'worm', 'imap', 'xlock', 'multihop',
       'warezmaster', 'named', 'snmpguess', 'phf', 'snmpgetattack',
       'xsnoop', 'guess_password', 'sendmail']

1 Ответ

3 голосов
/ 30 сентября 2019

Сначала создайте словарь списка из ваших списков, меняйте значения и используйте Series.map с последним удаленным . на Series.str.rstrip:

Примечание :

Если значение не существует ни в одном списке, функция map возвращает значение запаздывания NaN. Например, в данных выборки для значения normal., поскольку в списках нет normal.

d1 = {'dos':dos,'probe':probe,'r2l':r2l}

#swap key values in dict
#http://stackoverflow.com/a/31674731/2901002
d = {k: oldk for oldk, oldv in d1.items() for k in oldv}

df['attack_type'] = df['connection_type'].str.rstrip('.').map(d)

Сведения :

print (d)
{'udpstorm': 'dos', 'apache2': 'dos', 'mailbomb': 'dos', 'back': 'dos', 'neptune': 'dos', 'land': 'dos', 'smurf': 'dos', 'teardrop': 'dos', 'processtable': 'dos', 'pod': 'dos', 'satan': 'probe', 'nmap': 'probe', 'portsweep': 'probe', 'mscan': 'probe', 'ipsweep': 'probe', 'saint': 'probe', 'httptunnel': 'r2l', 'ftp_write': 'r2l', 'worm': 'r2l', 'imap': 'r2l', 'xlock': 'r2l', 'multihop': 'r2l', 'warezmaster': 'r2l', 'named': 'r2l', 'snmpguess': 'r2l', 'phf': 'r2l', 'snmpgetattack': 'r2l', 'xsnoop': 'r2l', 'guess_password': 'r2l', 'sendmail': 'r2l'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...