Polars pl.col(field).name.map_fields применяется ко всем столбцам структуры (не к указанному)Python

Программы на Python
Ответить
Anonymous
 Polars pl.col(field).name.map_fields применяется ко всем столбцам структуры (не к указанному)

Сообщение Anonymous »

У меня есть этот код:
import polars as pl

cols = ['Delta', 'Qty']

metrics = {'CHECK.US': {'Delta': {'ABC': 1, 'DEF': 2}, 'Qty': {'GHIJ': 3, 'TT': 4}},
'CHECK.NA': {},
'CHECK.FR': {'Delta': {'QQQ': 7, 'ABC': 6}, 'Qty': {'SS': 9, 'TT': 5}}
}

df = pl.DataFrame([{col: v.get(col) for col in cols} for v in metrics.values()])\
.insert_column(0, pl.Series('key', metrics.keys()))\
.with_columns([pl.col(col).name.map_fields(lambda x: f'{col} ({x})') for col in cols])

Теперь df.unnest('Qty') правильно выдает все столбцы в формате Qty (xxx):
shape: (3, 5)
┌──────────┬────────────┬────────────┬──────────┬──────────┐
│ key ┆ Delta ┆ Qty (GHIJ) ┆ Qty (TT) ┆ Qty (SS) │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ struct[3] ┆ i64 ┆ i64 ┆ i64 │
╞══════════╪════════════╪════════════╪══════════╪══════════╡
│ CHECK.US ┆ {1,2,null} ┆ 3 ┆ 4 ┆ null │
│ CHECK.NA ┆ null ┆ null ┆ null ┆ null │
│ CHECK.FR ┆ {6,null,7} ┆ null ┆ 5 ┆ 9 │
└──────────┴────────────┴────────────┴──────────┴──────────┘

Однако, когда я делаю то же самое для df.unnest('Delta'), он неправильно возвращает столбцы с Qty (xxx):
shape: (3, 5)
┌──────────┬───────────┬───────────┬───────────┬────────────┐
│ key ┆ Qty (ABC) ┆ Qty (DEF) ┆ Qty (QQQ) ┆ Qty │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ i64 ┆ i64 ┆ struct[3] │
╞══════════╪═══════════╪═══════════╪═══════════╪════════════╡
│ CHECK.US ┆ 1 ┆ 2 ┆ null ┆ {3,4,null} │
│ CHECK.NA ┆ null ┆ null ┆ null ┆ null │
│ CHECK.FR ┆ 6 ┆ null ┆ 7 ┆ {null,5,9} │
└──────────┴───────────┴───────────┴───────────┴────────────┘

Значения выглядят правильно, только имена столбцов неправильные.
Я неправильно использую pl.col(col).name.map_field(...)? Как я могу исправить свой код, чтобы результат был таким:
shape: (3, 5)
┌──────────┬─────────────┬─────────────┬─────────────┬────────────┐
│ key ┆ Delta (ABC) ┆ Delta (DEF) ┆ Delta (QQQ) ┆ Qty │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ i64 ┆ i64 ┆ struct[3] │
╞══════════╪═════════════╪═════════════╪═════════════╪════════════╡


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

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

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

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

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

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