Как сравнить значение из одной строки со всеми другими строками? - PullRequest
0 голосов
/ 10 октября 2019

Я хочу сравнить каждую строку со всеми другими строками в пандах.

Имея этот фрейм данных:

index     entity

a           1
            2
            3

b           3
            3
            9

c           10
            0
            1

d           9
            3
            0

Я хочу найти соответствие:

[0,1], [0,2], [0,3] (это индексы) потому что 1,2,3 (это значения в столбце) существует в каждом столбце. Кроме того, как я могу на самом деле считать повторяющиеся совпадения? Например, индекс A находит пару со всеми значениями (один, два, три), индекс C только с 1 значением (ноль).

Я понимаю, что мне нужно держать строку с индексом A в переменной, а затем сравниватьэто против всех других строк в цикле. После этого я перехожу к строке с индексом B и повторяю это действие для каждой второй строки, включая строку с индексом A.

Как мне удерживать одну строку в памяти и проверять ее по всем другим строкам?

Вывод может быть в формате списка [0,1], [0,2], где числа являются индексами.

Это своего рода псевдокод, который я сейчас имею в виду:

var = [x for x in e_dataframe.entity]

for rows in e_dataframe.entity:
    for x in var:
        if x == rows:
            print('match', x, ' and ', rows)
        else:
            print('not match ', x , ' and ', rows)

Где entity каков будет наш столбец с числовыми значениями выше.

Конечно, это неправильно, я ничего не сопоставляю. Я почему-то не могу обернуться, чтобы написать этот цикл.

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

Я пошел с каким-то смешанным подходом. Но в некотором смысле он просто ищет дублированные значения.

Сначала я создал новый столбец с True / False в зависимости от того, дублируется ли объект (встречается много раз). Затем я перебираю кортеж сущности и ее логическое значение. Я установил условие, чтобы проверять, действительно ли сущность повторяется, а затем я задаю значение сущности в качестве маски для pandas dataframe, чтобы найти все другие идентичные сущности.

df_words['dup_check'] = df_words.entity.duplicated(keep=False)
indexes_list = []

for rows in zip(df_words.entity, df_words.dup_check):
    if rows[1] == True:
            i_list = df_words[df_words.entity == rows[0]]
            indexes_list.append(i_list)
0 голосов
/ 11 октября 2019

Мне не совсем понятно, что вы пытаетесь сделать, но вот версия вашего кода, которая работает. Обратите внимание на некоторые небольшие изменения в именах переменных.

var = [x for x in df["entity"]]
#print(var)

for row in df["entity"]:
    #print(row)
    for x in var:
        if x == row:
            print('match', x, ' and ', row)
        else:
            print('not match ', x , ' and ', row)

Вы пытаетесь найти дубликаты? Я также не понимаю логику пар индексов, о которых вы упомянули.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...