Фильтр Pandas Кадр данных по количеству записей в списке и упорядочение вывода по парам - PullRequest
1 голос
/ 28 апреля 2020

Я работаю с CSV-файлом в формате, подобном приведенному ниже, созданным с помощью df.groupby для фильтрации идентификаторов, где публикуются общие ссылки.

 url        id
 bbc.com     ['183','194','101']
 cnn.com     ['182', '193', '103']
 google.com  ['131']

Я сейчас пытаюсь включить это в новый CSV, который показывает каждый раз, когда два идентификатора разделяют одну и ту же ссылку.

Так что мой идеальный вывод будет выглядеть так, особенно без кавычек:

source target
183, 194
183, 101
194, 101
182, 193
182, 103
103, 193

Буду очень признателен за любую помощь!

Я пытался начать с df.drop, чтобы удалить строки, содержащие менее одной записи, но он читает всю запись как строку, то есть ['183,' 194 ',' 101 '] в целом Строка, а не список, поэтому я немного застрял.

1 Ответ

0 голосов
/ 05 мая 2020

Полагаю, вам нужно использовать itertools.combination (x, k). Вот пример:

import pandas as pd
import numpy as np
import itertools

df = pd.DataFrame({ 'url': ['bbc.com', 'cnn.com', 'google.com'],
              'id' : [['183','194','101'], ['182', '193', '103'], ['131']  ]})

df

    url         id
0   bbc.com     [183, 194, 101]
1   cnn.com     [182, 193, 103]
2   google.com  [131]

Вот l oop, который производит вывод:

k =2
for x in df['id'].values:
    for a, b in itertools.combinations(x, k):
          print(a, b)

Вывод:

 183 194
 183 101
 194 101
 182 193
 182 103
 193 103
...