Этот вопрос может быть немного сложным ...
У меня есть функция, которая помечает фрейм данных на основе некоторых значений в его столбцах.Функция получает в качестве параметра данные, фрейм и словарь.В этом словаре есть пары ключ-значение, которые указывают столбцы (ключ) и значение, которое должно быть помечено определенным номером.Например:
{"ip_src": "192.168.84.129", "ip_dst": "192.168.84.128", "label": 1}
, когда столбец «ip_src» информационного кадра имеет значение «192.168.84.129», а столбец «ip_dst» имеет значение «192.168.84.128», эти строки должны быть помеченыс 1.Дело в том, что эти условия могут различаться, поэтому я хочу обобщить код, чтобы я мог передать несколько других условий:
{"ip_src": "192.168.1.101", "dst_port": 19305, "label": 4}
и т. Д.
Я начал с:
def labeling(df, crit):
for dic in crit:
lbl = dic["label"]
del dic["label"]
conds = []
pairs = len(dic)
for key in dic:
conds.append((df[key] == dic[key]))
Но я застреваю в последней строке, потому что не могу понять, как объединить условия и затем применить их как: df[conds] = lbl
Спасибо!
Редактировать:
Ввод:
index ip_src ip_dst ip_proto frame_time_delta \
0 0 192.168.84.129 192.168.84.128 17.0 0.000000
1 1 31.13.94.53 192.168.1.101 17.0 0.006656
2 2 192.168.1.101 31.13.94.53 17.0 0.012948
payload_size src_port dst_port flow_dir
0 172.0 52165.0 40002.0 1
1 176.0 40002.0 52165.0 0
2 172.0 52165.0 19305.0 1
Выход:
ip_src ip_dst ip_proto frame_time_delta \
0 192.168.84.129 192.168.84.128 17.0 0.000000
1 31.13.94.53 192.168.1.101 17.0 0.006656
2 192.168.1.101 31.13.94.53 17.0 0.012948
payload_size src_port dst_port flow_dir label
0 172.0 52165.0 35456.0 1 1
1 176.0 40002.0 52165.0 0 0
2 172.0 52165.0 19305.0 1 4
Возможнослучаи:
l_crit = [{"ip_src": "192.168.84.129", "ip_dst": "192.168.84.128", "label": 1},
{"ip_src": "192.168.1.100", "ip_dst": "192.168.1.105", "dst_port": 9999, "label": 1},
{"ip_src": "192.168.1.101", "ip_dst": "104.44.195.76", "label": 2},
{"ip_src": "192.168.1.101", "ip_dst": "31.13.94.53", "ip_proto": 17, "label": 3},
{"ip_src": "192.168.1.101", "dst_port": 19305, "label": 4}]