Изображение есть кадр данных с большим количеством отсутствующих transaction_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 отсутствует, в то время как существуют действительные «дата» и «transaction_total», заполните «общий баланс» с помощью «предыдущей даты balance_total-transaction_total на дату, когда balance_total отсутствует» (случай в строке 3 : 100+ (-3)=97)
(3) если есть действительная дата, но как transaction_total, так и balance_total являются NaN, просто заполните balance_total последней даты (например, строка 4: поскольку total_balance на 03.01.2019 будет 97 на основе предыдущего расчета, баланс на 04.01.2019 будет 97, так как отсутствует transaction_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
98
? - person Vishnudev   schedule 24.02.2020