< 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_')
Как мне это сделать? решить такую задачу, когда мне нужно взорвать сразу две колонны? Я видел эффективный способ разложить (развернуть) несколько столбцов списка в DataFrame pandas, но, к сожалению, списки платежей иledger_account_bookings могут иметь разный размер, а также могут быть динамическими (например, это возможно иметь 0–5 платежей и 0–5 Ledger_account_bookings, фиксированного значения нет)
Будем очень благодарны за любую помощь.
Подробнее здесь: https://stackoverflow.com/questions/789 ... -dataframe