Отображение: существует фрейм данных с большим количеством пропущенных транзакций_total и balance_total и датой
id,date,transaction_total,balance_total
1,01/01/2019,-1,102
1,01/02/2019,-2,100
1,01/03/2019,-3,
1,01/04/2019,,
1,01/05/2019,-4,
2,01/01/2019,-2,200
2,01/02/2019,-2,100
2,01/04/2019,,
2,01/05/2019,-4,
Вот сценарий создания-ввода:
import pandas as pd
import numpy as np
users=pd.DataFrame(
[
{'id':1,'date':'01/01/2019', 'transaction_total':-1, 'balance_total':102},
{'id':1,'date':'01/02/2019', 'transaction_total':-2, 'balance_total':100},
{'id':1,'date':'01/03/2019', 'transaction_total':-3, 'balance_total':''},
{'id':1,'date':'01/04/2019', 'transaction_total':'', 'balance_total':''},
{'id':1,'date':'01/05/2019', 'transaction_total':-4, 'balance_total':''},
{'id':2,'date':'01/01/2019', 'transaction_total':-2, 'balance_total':200},
{'id':2,'date':'01/02/2019', 'transaction_total':-2, 'balance_total':100},
{'id':2,'date':'01/04/2019', 'transaction_total':'', 'balance_total':''},
{'id':2,'date':'01/05/2019', 'transaction_total':-4, 'balance_total':''}
]
)
цель - достичь следующее:
желаемый конечный результат:
id,date,balance_total
1,01/01/2019,102
1,01/02/2019,100
1,01/03/2019,97
1,01/04/2019,97
1,01/05/2019,93
2,01/01/2019,200
2,01/02/2019,100
2,01/03/2019,97
2,01/04/2019,97
2,01/05/2019,93
(1), если дата отсутствует, заполните дату балансом с предыдущей даты (я думаю, что решение по переиндексации в этой ссылке могло бы работа Pandas заполнение пропущенных дат и значений в группе )
(2) если Balance_total отсутствует, когда существуют действительные «дата» и «транзакция_total», заполните «итоговое значение баланса» с «balance_total предыдущей даты-транзакции_total на дату, когда Balance_total отсутствует» (случай в строке 3: 100+ (-3) = 97)
(3), если есть действительная дата, но оба параметра transition_total и balance_total имеют значение NaN, просто введите значение Balance_total за последнюю дату (например, строка 4: поскольку итоговый баланс в 01/03/2019 будет равен 97 на основе предыдущего расчета, баланс на 01/04/2019 будет 97, потому что нет транзакции_total.)
желаемый вывод метаданных:
id,date,transaction_total,balance_total
1,01/01/2019,-1,102
1,01/02/2019,-2,100
1,01/03/2019,-3,97
1,01/04/2019,0,97
1,01/05/2019,-4,93
2,01/01/2019,-2,200
2,01/02/2019,-2,100
2,01/03/2019,-3,97
2,01/04/2019,,97
2,01/05/2019,-4,93