Как сопоставить два столбца Polars, используя один и тот же словарь [дубликат]Python

Программы на Python
Ответить
Anonymous
 Как сопоставить два столбца Polars, используя один и тот же словарь [дубликат]

Сообщение Anonymous »

У меня есть кадр данных, описывающий сеть путем связывания двух узлов вместе с весом:
import polars as pl
df_network = pl.DataFrame(
{"node1": ["a", "c", "c"], "node2": ["b", "d", "a"], "weight": [1, 2, 3]}
)
# shape: (3, 3)
# ┌───────┬───────┬────────┐
# │ node1 ┆ node2 ┆ weight │
# │ --- ┆ --- ┆ --- │
# │ str ┆ str ┆ i64 │
# ╞═══════╪═══════╪════════╡
# │ a ┆ b ┆ 1 │
# │ c ┆ d ┆ 2 │
# │ c ┆ a ┆ 3 │
# └───────┴───────┴────────┘

И словарь, который сопоставляет узел с целочисленным индексом:
df_node_index = pl.DataFrame({"node": ["d", "b", "c", "a"], "index": [0, 1, 2, 3]})
# shape: (4, 2)
# ┌──────┬───────┐
# │ node ┆ index │
# │ --- ┆ --- │
# │ str ┆ i64 │
# ╞══════╪═══════╡
# │ d ┆ 0 │
# │ b ┆ 1 │
# │ c ┆ 2 │
# │ a ┆ 3 │
# └──────┴───────┘

Каков элегантный полярный способ сопоставить узлы с их индексом, получив желаемое:
df_desirable = pl.DataFrame({"index1": [3, 2, 2], "index2": [1, 0, 3], "weight":[1,2,3]})
# shape: (3, 3)
# ┌────────┬────────┬────────┐
# │ index1 ┆ index2 ┆ weight │
# │ --- ┆ --- ┆ --- │
# │ i64 ┆ i64 ┆ i64 │
# ╞════════╪════════╪════════╡
# │ 3 ┆ 1 ┆ 1 │
# │ 2 ┆ 0 ┆ 2 │
# │ 2 ┆ 3 ┆ 3 │
# └────────┴────────┴────────┘

Мой текущий метод следующий: он не так уж и ужасен, но есть ли способ получше?
df_network.join(
df_node_index.rename({"index": "index1"}),
how="left",
left_on="node1",
right_on="node",
).join(
df_node_index.rename({"index": "index2"}),
how="left",
left_on="node2",
right_on="node",
).select(
["index1", "index2", "weight"]
).equals(df_desirable) # True


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

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

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

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

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

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