Кумулятивная совокупность списка полярностей[struct[]]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Кумулятивная совокупность списка полярностей[struct[]]

Сообщение Anonymous »

Мне нужно выполнить такое сложное преобразование фрейма данных:

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

original_dataframe = pl.DataFrame({'index': ['A', 'B', 'C', 'D', 'E', 'F', 'G'], 'content': [{'key': 3, 'val': 20}, {'key': 4, 'val': 50}, {'key': 3, 'val': 8}, {'key': 5, 'val': 70}, {'key': 4, 'val': -60}, {'key': 2, 'val': 30}, {'key': 4, 'val': 5}]})
┌───────┬───────────┐
│ index ┆ content   │
│ ---   ┆ ---       │
│ str   ┆ struct[2] │
╞═══════╪═══════════╡
│ A     ┆ {3,20}    │
│ B     ┆ {4,50}    │
│ C     ┆ {3,8}     │
│ D     ┆ {5,70}    │
│ E     ┆ {4,-60}   │
│ F     ┆ {2,30}    │
│ G     ┆ {4,5}     │
└───────┴───────────┘
||
\/
┌───────┬──────────────────────────┐
│ index ┆ content                  │
│ ---   ┆ ---                      │
│ str   ┆ list[struct[2]]          │
╞═══════╪══════════════════════════╡
│ A     ┆ [{3,20}]                 │
│ B     ┆ [{3,20}, {4,50}]         │
│ C     ┆ [{3,28}, {4,50}]         │
│ D     ┆ [{3,28}, {4,50}, {5,70}] │
│ E     ┆ [{3,28}, {5,70}]         │
└───────┴──────────────────────────┘
Это преобразование сочетает в себе:
  • кумулятивное добавление структуры в список построчно;
  • если в списке существует такое же поле 'key', агрегируйте две структуры по полю суммы struct 'val';;
  • если оно существует в списке li>
    если поле структуры 'val' имеет значение null.
Преобразование может быть уродливым, если использовать iter_rows() и to_list() для итерации кадра данных строки со списком промежуточных типов данных Python, dict. Но этот путь медленный. Как это можно решить, просто используя функции Polars, чтобы быстро и элегантно?
PS: Спасибо, @jqurious, напоминание, есть дополнительные требования, поэтому я обновил вопрос.

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

pl.DataFrame({'index': ['A', 'B', 'C', 'D', 'E', 'F'], 'content': [{'key': 3, 'val': 20}, {'key': 4, 'val': 50}, {'key': 3, 'val': 8}, {'key': 2, 'val': 30}, {'key': 4, 'val': -60}, {'key': 4, 'val': 5}]})

┌───────┬───────────┐
│ index ┆ content   │
│ ---   ┆ ---       │
│ str   ┆ struct[2] │
╞═══════╪═══════════╡
│ A     ┆ {3,20}    │
│ B     ┆ {4,50}    │
│ C     ┆ {3,8}     │
│ D     ┆ {2,30}    │
│ E     ┆ {4,-60}   │
│ F     ┆ {4,5}     │
└───────┴───────────┘
||
\/
┌───────┬──────────────────────────┐
│ index ┆ content                  │
│ ---   ┆ ---                      │
│ str   ┆ list[struct[2]]          │
╞═══════╪══════════════════════════╡
│ A     ┆ [{3,20}]                 │
│ B     ┆ [{3,20}, {4,50}]         │
│ C     ┆ [{3,28}, {4,50}]         │
│ D     ┆ [{2,30}, {3,28}, {4,50}] │
│ E     ┆ [{2,30}, {3,28}]         │
│ F     ┆ [{2,30}, {3,28}, {4,5}]  │
└───────┴──────────────────────────┘
обновленное требование:
  • если поле структуры 'val' 0, оно снова должно быть накопительным агрегатом;


Подробнее здесь: https://stackoverflow.com/questions/785 ... liststruct
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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