python - 如何使用 apply 函数和 lambda 函数将列表的值添加到列值?

标签 python python-3.x pandas lambda apply

我想使用 apply 函数和 lambda 函数从列表值中添加列中的值

我已经尝试使用“for”,但它花了很多时间,因为有很多行(超过 60,000 行)。

例如 如果“connection_type”为“snmpgetattack”,则“attack_type”必须为“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']

最佳答案

首先从列表中创建列表字典,交换值并使用 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'}

关于python - 如何使用 apply 函数和 lambda 函数将列表的值添加到列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58162447/

相关文章:

python - Django 模型是否有包含所有当前值的数据字典?

python - (Python : discord. py)错误 : Could not build wheels for multidict, 使用 PEP 517 且无法直接安装的 yarl

Python在短语列表中查找单词出现并将单词链接到短语

python - 更改 x 轴而不更改 pandas 中的索引

python - 如何用 python-attrs 构造解决 "unexpected keyword argument",让 mypy 开心?

python - 如何按多个键对 3d 数组进行排序

python : List of string in key value pairs to map

Python,Pandas 根据值选择行

python - Pandas 根据列值组合数据框

python - Pandas - 在多列中查找并迭代具有匹配值的行,并在另一列中乘以值