Як виконати нечітку відповідність у pandas (з прикладом)


Часто вам може знадобитися об’єднати два набори даних разом у pandas на основі неповно відповідних рядків. Це називається нечіткою відповідністю .

Найпростіший спосіб виконати нечітку відповідність у pandas — це використати функцію get_close_matches() із пакету difflib .

У наступному прикладі показано, як використовувати цю функцію на практиці.

Приклад: нечітка відповідність у pandas

Скажімо, у нас є такі два фрейми даних panda, які містять інформацію про різні баскетбольні команди:

 import pandas as pd

#create two DataFrames
df1 = pd. DataFrame ({' team ': ['Mavericks', 'Nets', 'Warriors', 'Heat', 'Lakers'],
                    ' points ': [99, 90, 104, 117, 100]})

df2 = pd. DataFrame ({' team ': ['Mavricks', 'Warrors', 'Heat', 'Netts', 'Lakes'],
                    ' assists ': [22, 29, 17, 40, 32]})

#view DataFrames
print (df1)

        team points
0 Mavericks 99
1 Nets 90
2 Warriors 104
3 Heat 117
4 Lakers 100

print (df2)

       team assists
0 Mavricks 22
1 Warriors 29
2 Heat 17
3 Netts 40
4 Lakes 32

Тепер припустімо, що ми хочемо об’єднати два DataFrames на основі стовпця Team .

Оскільки назви команд дещо відрізняються між двома DataFrames, нам потрібно використовувати нечітку відповідність, щоб знайти назви команд, які збігаються найбільше.

Для цього ми можемо використати функцію get_close_matches() із пакета difflib :

 import difflib 

#create duplicate column to retain team name from df2
df2[' team_match '] = df2[' team ']

#convert team name in df2 to team name it most closely matches in df1
df2[' team '] = df2[' team ']. apply (lambda x: difflib. get_close_matches (x, df1[' team '])[ 0 ])

#merge the DataFrames into one
df3 = df1. merge (df2)

#view final DataFrame
print (df3)

        team points assists team_match
0 Mavericks 99 22 Mavricks
1 Nets 90 40 Nets
2 Warriors 104 29 Warriors
3 Heat 117 17 Heat
4 Lakers 100 32 Lakes

Результатом є фрейм даних, що містить кожну з п’яти імен команд з першого DataFrame, а також команду, яка найбільше відповідає другому DataFrame.

Стовпець team_match відображає назву команди з другого DataFrame, яка найбільше відповідає назві команди з першого DataFrame.

Примітка №1 : за замовчуванням get_close_matches() повертає три найближчі збіги. Однак, використовуючи [0] у кінці лямбда-функції, ми змогли повернути лише найближчу назву команди.

Примітка №2: ви можете знайти повну документацію для функції get_close_matches() тут .

Додаткові ресурси

У наступних посібниках пояснюється, як виконувати інші типові завдання в pandas:

Як об’єднати Pandas DataFrames у кількох стовпцях
Як об’єднати два Pandas DataFrames в індексі
Pandas Join або Merge: у чому різниця?

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *