Объедините строки, чтобы удалить дубликаты в CSV Python и Pandas - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь объединить несколько наборов строк вместе, чтобы удалить дубликаты в CSV, используя python и pandas. Исходя из общего значения, «ID», в котором есть повторяющиеся строки, значения из другого столбца «HostActed» должны быть объединены с разрывом строки. Аналогично этому сообщению: введите описание ссылки здесь , однако мне нужно сохранить все существующие значения, которые соответствуют одному и тому же идентификатору. Я уже проделал аналогичную работу со столбцами, используя приведенный ниже код в качестве примера, однако это не совсем то же самое:

df = pd.read_csv("output.csv")

cols = ['Host','Protocol','Port']
newcol = ['/'.join(i) for i in zip(df['Host'],df['Protocol'],df['Port'].map(str))]
df = df.assign(HostAffected=newcol).drop(cols, 1)

Пока у меня есть этот код:

df.groupby(['Plugin ID','Description])[HostAffected'].apply(list)

Адаптировано из этой темы: введите описание ссылки здесь однако это не работает.

Пример набора данных, который у меня был бы, выглядит следующим образом:

PluginID    Description HostAffected
10395   Windows SMB Shares Enumeration  10.0.0.10/tcp/445
10396   Windows SMB Shares Access   10.0.0.10/tcp/445
10396   Windows SMB Shares Access   192.168.0.12/tcp/445
10398   Windows SMB LsaQueryInformationPolicy   10.0.0.10/tcp/445
10399   SMB Use Domain SID to Enumerate Users   10.0.0.10/tcp/445
10400   Windows SMB Registry Remotely Accessible    10.0.0.10/tcp/445
10736   DCE Services Enumeration    10.0.0.10/tcp/139
10736   DCE Services Enumeration    10.0.0.10/tcp/445
10736   DCE Services Enumeration    192.168.0.12/tcp/445

Значения разделены запятыми, однако я использовал пробелы, чтобы сделать их более понятными. Я хочу, чтобы это выглядело так, когда есть только одна уникальная строка для столбца «Идентификатор плагина» и «Описание» и «HostAffered»:

ID  Description HostAffected
10395   Windows SMB Shares Enumeration  10.0.0.10/tcp/445
10396   Windows SMB Shares Access   10.0.0.10/tcp/445
192.168.0.12/tcp/445
10398   Windows SMB LsaQueryInformationPolicy   10.0.0.10/tcp/445
10399   SMB Use Domain SID to Enumerate Users   10.0.0.10/tcp/445
10400   Windows SMB Registry Remotely Accessible    10.0.0.10/tcp/445
10736   DCE Services Enumeration    10.0.0.10/tcp/139
10.0.0.10/tcp/445
192.168.0.12/tcp/445

По сути, могут быть одинаковые идентификатор и описание для нескольких наборов HostsActed. Любая помощь будет принята с благодарностью, так как это немного сложнее и сложнее, чем объединение столбцов вместе.

1 Ответ

0 голосов
/ 14 мая 2018

После комментариев мы получаем его strip, если тралировать wthitespaces с apply и join с line break:

df['Description'] = df['Description'].str.strip()

(df.groupby(['Plugin ID','Issue'])['HostAffected']
   .apply('\n'.join)
   .reset_index())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...