Отфильтруйте один столбец и посчитайте вхождение в другом столбце. - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь получить наибольшее вхождение во втором столбце (IP-адрес источника), используя 4-й столбец (предупреждение).

Пример списка:

test=[["2019-01-05 03:15:49","192.168.0.15","192.168.0.116:4070","network discover"],
["2019-01-05 03:25:49,"192.168.0.15","192.168.0.1:4070","network discover"],
["2019-01-05 03:35:49","192.168.0.15","192.168.0.116:4070","network discover"],
["2019-01-05 03:55:49,"192.168.0.12","192.168.0.1:4070","network discover"],
["2019-01-05 04:38:13","192.168.0.15","192.168.0.41:445","ETERNALBLUE tool"],
["2019-01-05 05:28:13","192.168.0.12","192.168.0.39:445","ETERNALBLUE tool"]]

Требуемый выход

обнаружение сети, 192.168.0.15 = 3

обнаружение сети, 192.168.0.12 = 1

ETERNALBLUE инструмент,192.168.0.15 = 1

ETERNALBLUE инструмент, 192.168.0.12 = 1

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Вы можете использовать Counter:

from collections import Counter
from pprint import pprint

c = Counter((i[-1], i[1]) for i in test)

pprint(c)

Выход:

Counter({('network discover', '192.168.0.15'): 3,
         ('network discover', '192.168.0.12'): 1,
         ('ETERNALBLUE tool', '192.168.0.15'): 1,
         ('ETERNALBLUE tool', '192.168.0.12'): 1})
0 голосов
/ 25 февраля 2019

Использование collections.defaultdict

Пример:

from collections import defaultdict

test=[["2019-01-05 03:15:49","192.168.0.15","192.168.0.116:4070","network discover"],
["2019-01-05 03:25:49","192.168.0.15","192.168.0.1:4070","network discover"],
["2019-01-05 03:35:49","192.168.0.15","192.168.0.116:4070","network discover"],
["2019-01-05 03:55:49","192.168.0.12","192.168.0.1:4070","network discover"],
["2019-01-05 04:38:13","192.168.0.15","192.168.0.41:445","ETERNALBLUE tool"],
["2019-01-05 05:28:13","192.168.0.12","192.168.0.39:445","ETERNALBLUE tool"]]

result = defaultdict(int)
for i in test:
    result[(i[-1], i[1])] += 1
print(result)

Выход:

defaultdict(<type 'int'>, {
    ('network discover', '192.168.0.12'): 1, 
    ('ETERNALBLUE tool', '192.168.0.15'): 1, 
    ('ETERNALBLUE tool', '192.168.0.12'): 1, 
    ('network discover', '192.168.0.15'): 3
    })
...