У меня есть кадр данных, описывающий сеть путем связывания двух узлов вместе с весом:
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
Как сопоставить два столбца Polars, используя один и тот же словарь [дубликат] ⇐ Python
Программы на Python
1762080949
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
Подробнее здесь: [url]https://stackoverflow.com/questions/75756664/how-to-map-two-polars-columns-using-the-same-dictionary[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия