Извлечение данных из двух вложенных столбцов в одном кадре данныхPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Извлечение данных из двух вложенных столбцов в одном кадре данных

Сообщение Anonymous »

У меня есть фрейм данных pandas, содержащий транзакции. Транзакция регистрируется либо как платеж, либо как Ledger_account_booking. Одна транзакция может иметь несколько платежей и/или несколько резервирований по счетам главной книги. Поэтому мои столбцы «Платежи» и «ledger_account_bookings» содержат список диктовок, причем количество списков в диктовке может варьироваться. Небольшой пример фрейма данных выглядит следующим образом:


< tr>
transaction_id
total_amount
дата
платежи
ledger_account_bookings




4308
645,83
30-8-2024
[]
[]


4254
291,67
2-7-2024
[]
[{'ledger_id': '4265', 'сумма' : '291,67'}]


4128
847
14 февраля 2024 г.
[{'pay_id': '4128', 'amount': '847.0'}]
[]


4248
4286,98
25 июня 2024 г.
[{'Payment_id': '4261', 'amount': '400.0'},
 {'Payment_id ': '4262', 'сумма': '11.0'},
 {'Payment_id': '4263', 'Amount': '1668.51'},
 {'Payment_id': '4264', 'сумма': '1868,54'},
 {'платеж_id': '4265', 'сумма': '20,91'},
 {'платеж_ид': '4266', 'сумма': '2,21 '},
 {'pay_id': '4267', 'amount': '309.62'}]
[{'ledger_id': '4265', 'amount': '6,19'}]


4192
6130,22
24 апреля 2024 г.
[{'pay_id': '4193', 'amount': '9,68'}]
[{'ledger_id': '4222', 'amount':'2106.0'},
 {'ledger_id': '4222','amount': '4014.54'}]


4090
1158,98
25- 1-2024
[{'id': '4110','amount': '16.22'},
 {'id': '4111', 'amount': '84.0'},
 {'id': '4112', 'сумма': '41,99'},
 {'id': '4113, 'сумма': '9,11', /> {'id': '4114', 'amount': '10.0'},
 {'id': '4115', 'amount': '997.16'}]
[{'ledger_id': '4231', 'amount': '-0.32'},
 {'ledger_id': '4231', 'amount': '-0.18'}]



Я хочу, чтобы каждый дикт в одном из столбцов платил илиledger_account_bookings становится строкой в ​​моем фрейме данных. Ожидаемый результат будет выглядеть примерно так:


< tr>
transaction_id
total_amount
дата
pay_id
pay_amount
ledger_id
ledger_amount




4308
645,83
30 -8-2024
Нет
Нет
Нет
Нет


4254
291,67
07.02.2024
Нан
Нет
4265291,67


4128
847
14 февраля 2024 г.
4128
847,0
Нет
Нет


4248
4286,98
25-6-2024
4261
400,0
Нет
Нет


4248
4286,98
25-6-2024
4262
11.0
Нет
Нан


4248< /td>
4286,98
25-6-2024
4263
< td>1668,51
Нет
Нан


4248
4286,98
25-6-2024
4264
1868.4
Нет
Нан


4248
4286,98
25-6-2024
4265
20,91
Нет
Нан

4248
4286,98
25-6-2024
4266
2.21
Нет
Нет


4248
4286,98
25-6-2024< /td>
4267
309,62
Нет
Нан


4248
4286,98
25 -6-2024
Нет
Нет
4265
6,19


4192
6130,2224-4-2024
4193
9,68
Нет
Нет


4192
6130,22
24 апреля 2024 г.
Нет
Нет
4222
2106


4192
< td>6130,22
24-4-2024
Нет
Нет4222
4014,54


4090
1158,98
25-1-2024
4110
16.22
Нет
Нет


4090
1158,98
25-1-2024
4111
84,0
Нет
Нет


4090
1158,98
25-1-2024
4112
41,99
Нет
Нет


4090
1158,98
25-1-2024
< td>4113
9.11
Нет
Нет


4090
1158,98
25-1-2024
4114
10,0
Нет
Нет


4090
1158,98
25-1- 2024
4115
997,16
Нет
Нет< /td>


4090
1158,98
25 января 2024 г.
Нет
Нет
4231
0,32


4090
1158,98< ш />25 января 2024 г.
Нет
Нет
4231
0,18



Например , транзакция 4248 содержит 7 платежей и 1 резервирование счета ГК. Таким образом, полученный кадр данных будет иметь 8 строк. транзакция 4192 имеет 2 платежа и 1 резервирование счета главной книги, поэтому в результирующем df должно быть 3 строки.
Я знаю, как добиться этого для одного столбца, например, используя следующий код:
Я знаю, как добиться этого для одного столбца, например, с помощью следующего кода:
р>

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

df_explode = df_financial_mutations.explode(['payments'])
#Normalize the json column into separate columns
df_normalized = json_normalize(df_explode['payments'])
#Add prefix to the columns that were 'exploded'
df_normalized = df_normalized.add_prefix('payments_')
Проблема в том, что я не знаю, как это сделать для двух столбцов. Если бы я снова вызвал метод «Взорвать» вledger_account_bookings, результат стал бы неясным, поскольку я уже развернул столбец платежей, и поэтому в мой фрейм данных были введены «дубликаты» строк. Итак, если платеж был развернут, у меня теперь есть две строки с абсолютно одинаковыми значениями в столбцеledger_account_bookings. Когда я снова расчленяю, на этот раз в другом столбце, эти «дубликаты» также расчленяются, так что мой фрейм данных теперь содержит строки данных, которые не имеют смысла.
Как мне это сделать? решить такую ​​задачу, когда мне нужно взорвать сразу две колонны? Я видел эффективный способ разложить (развернуть) несколько столбцов списка в DataFrame pandas, но, к сожалению, списки платежей иledger_account_bookings могут иметь разный размер, а также могут быть динамическими (например, это возможно иметь 0–5 платежей и 0–5 Ledger_account_bookings, фиксированного значения нет)
Будем очень благодарны за любую помощь.

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Извлечение данных из двух вложенных столбцов в одном кадре данных
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Извлечение данных из двух вложенных столбцов в одном кадре данных
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Извлечение данных из двух вложенных столбцов в одном кадре данных
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Извлечение данных из двух вложенных столбцов в одном кадре данных
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Извлечение данных из двух вложенных столбцов в одном кадре данных
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

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