Как выполнить быстрое нечеткое сопоставление между кадрами данных Polars?Python

Программы на Python
Ответить
Anonymous
 Как выполнить быстрое нечеткое сопоставление между кадрами данных Polars?

Сообщение Anonymous »

У меня есть два кадра данных Polars, содержащие уникальный идентификатор и имя утилиты. Я пытаюсь построить сопоставление записей между этими двумя кадрами данных.
Я использую плагин Polars_fuzzy_match для выполнения нечеткого поиска строк по записям.
Мой первый кадр данных (wg_df) примерно является подмножеством второго (eia_df). В приведенном ниже коде я передаю каждое имя_утилиты из wg_df в fuzzy_match_score, выполняемое против eia_utility_name. Могу ли я избежать итерации по строкам и векторизовать это?
import polars as pl
from polars_fuzzy_match import fuzzy_match_score

# Sample data
# wg_df is approximately a subset of eia_df.
wg_df = pl.DataFrame({"wg_id": [1, 2], "utility_name": ["Utility A", "Utility B"]})

eia_df = pl.DataFrame(
{"eia_id": [101, 102, 103], "utility_name": ["Utility A co.", "Utility B", "utility c"]}
)

out = pl.DataFrame(
schema=[
("wg_id", pl.Int64),
("eia_id", pl.Int64),
("wg_utility_name", pl.String),
("utility_name", pl.String),
("score", pl.UInt32),
],
)

# Iterate through each wg utility and find the best match in eia
# can this be vectorized?
for wg_id, utility in wg_df.iter_rows():
res = (
eia_df.with_columns(score=fuzzy_match_score(pl.col("utility_name"), utility))
.filter(pl.col("score").is_not_null())
.sort(by="score", descending=True)
)
# insert the wg_id and wg_utility_name into the results. They have to be put into the
res.insert_column(
0,
pl.Series("wg_id", [wg_id] * len(res)),
)
res.insert_column(2, pl.Series("wg_utility_name", [utility] * len(res)))
out = out.vstack(res.select([col_name for col_name in out.schema]))


Подробнее здесь: https://stackoverflow.com/questions/789 ... dataframes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»