Копирование значений строк на основе файла конфигурации из фрейма данных PolarsPython

Программы на Python
Ответить
Anonymous
 Копирование значений строк на основе файла конфигурации из фрейма данных Polars

Сообщение Anonymous »

У меня есть кадр данных, состоящий из столбца ID, Local, Entity, Field и Global.

Код: Выделить всё

# Creating a dictionary with the data
data = {'ID': [4, 4, 4, 4, 4],
'Local': ['A', 'B', 'C', 'D', 'E'],
'Field': ['P', 'Q', 'R', 'S', 'T'],
'Entity': ['K', 'L', 'M', 'N', 'O'],
'Global': ['F', 'G', 'H', 'I', 'J'],}

# Creating the dataframe
table = pl.DataFrame(data)
print(table)
shape: (5, 5)
┌─────┬───────┬───────┬──────────┬────────┐
│ ID  ┆ Local ┆ Field ┆ Entity   ┆ Global │
│ --- ┆ ---   ┆ ---   ┆ ---      ┆ ---    │
│ i64 ┆ str   ┆ str   ┆ str      ┆ str    │
╞═════╪═══════╪═══════╪══════════╪════════╡
│ 4   ┆ A     ┆ P     ┆ K        ┆ F      │
│ 4   ┆ B     ┆ Q     ┆ L        ┆ G      │
│ 4   ┆ C     ┆ R     ┆ M        ┆ H      │
│ 4   ┆ D     ┆ S     ┆ N        ┆ I      │
│ 4   ┆ E     ┆ T     ┆ O        ┆ J      │
└─────┴───────┴───────┴──────────┴────────┘
В наборе данных необходимо скопировать определенные строки. Для этой цели предоставляется следующий файл конфигурации со следующей информацией:

Код: Выделить всё

copying:
- column_name: P
source_table: K
destination_table: X
- column_name: S
source_table: N
destination_table: W
В файле конфигурации есть значение columns_name, которое ссылается на столбец Field, source_table, которое ссылается на данную сущность, и target_table, которая должна быть будущей записью в столбце Entity. Цель состоит в том, чтобы обогатить данные на основе существующих строк (только с помощью других таблиц).
Решение должно выглядеть следующим образом:

Код: Выделить всё

shape: (7, 5)
┌─────┬───────┬───────┬──────────┬────────┐
│ ID  ┆ Local ┆ Field ┆ Entity   ┆ Global │
│ --- ┆ ---   ┆ ---   ┆ ---      ┆ ---    │
│ i64 ┆ str   ┆ str   ┆ str      ┆ str    │
╞═════╪═══════╪═══════╪══════════╪════════╡
│ 4   ┆ A     ┆ P     ┆ K        ┆ F      │
│ 4   ┆ B     ┆ Q     ┆ L        ┆ G      │
│ 4   ┆ C     ┆ R     ┆ M        ┆ H      │
│ 4   ┆ D     ┆ S     ┆ N        ┆ I      │
│ 4   ┆ E     ┆ T     ┆ O        ┆ J      │
│ 4   ┆ A     ┆ P     ┆ X        ┆ F      │
│ 4   ┆ D     ┆ S     ┆ W        ┆ I      │
└─────┴───────┴───────┴──────────┴────────┘
Набор данных представляет собой DataFrame Polars, а файл конфигурации загружается как omegaconf. Я попробовал это с помощью этого кода:

Код: Выделить всё

conf.copying = [
{"column_name": "P", "source_table": "K", "destination_table": "X"},
{"column_name": "S", "source_table": "N", "destination_table": "W"},
]

# Iterate through the config file
for i in range(len(conf.copying)):
# Select the rows from the table dataframe that match the column_name and source_table fields in the config
match_rows = table.filter(
(pl.col("Field") == conf.copying[i]["column_name"])
& (pl.col("Entity") == conf.copying[i]["source_table"])
)
# Add the column Entities with the destination_table
match_rows = match_rows.select(
[
"ID",
"Local",
"Field",
"Global",
]
)
# Add the column Entities with the destination_table
match_rows = match_rows.with_columns(
pl.lit(conf.copying[i]["destination_table"]).alias("Entity")
)
match_rows = match_rows[
[
"ID",
"Local",
"Field",
"Entity",
"Global",
]
]
# Append the new rows to the original table dataframe
df_copy = match_rows.vstack(table)
Однако данные не копируются должным образом и не добавляются в существующий набор данных. Что я делаю не так?

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

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

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

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

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

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