Если существует фрейм данных:
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':np.nan, 'balance_total':np.nan},
{'id':1,'date':'01/04/2019', 'transaction_total':np.nan, 'balance_total':np.nan},
{'id':1,'date':'01/05/2019', 'transaction_total':-4, 'balance_total':np.nan},
{'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':np.nan, 'balance_total':np.nan},
{'id':2,'date':'01/05/2019', 'transaction_total':-4, 'balance_total':np.nan}
]
)
print(users[['id','date','balance_total','transaction_total']])
Фрейм данных:
id date balance_total transaction_total
0 1 01/01/2019 102.0 -1.0
1 1 01/02/2019 100.0 -2.0
2 1 01/03/2019 NaN NaN
3 1 01/04/2019 NaN NaN
4 1 01/05/2019 NaN -4.0
5 2 01/01/2019 200.0 -2.0
6 2 01/02/2019 100.0 -2.0
7 2 01/04/2019 NaN NaN
8 2 01/05/2019 NaN -4.0
Как я могу сделать следующее?
Если оба значения параметраират_тол NaN, просто введите в поле date_total последней даты (например, в строке 3, где id = 1, так как транзакции_total пользователя и balance_total пользователя 1 равны NaN, заполните 100 от 01/02/2019. То же самое будет в строке 4, введите 100 от 01 /03/2019.)
Если для параметраaction_total установлено значение NOT NaN, а для параметра balance_total установлено значение NaN, выполните математические расчеты для параметра balance_total для предыдущей даты + транзакции_total для текущей строки.
Для пользователя 1, например, 01/05/2019: общая сумма баланса будет равна = 100 + (- 4), где 100 - это общая сумма баланса 01/04/2019, а (-4) - 01 / Итого за транзакцию 05/2019.
Желаемый результат:
id date balance_total transaction_total
0 1 01/01/2019 102.0 -1.0
1 1 01/02/2019 100.0 -2.0
2 1 01/03/2019 100.0 NaN
3 1 01/04/2019 100.0 NaN
4 1 01/05/2019 96.0 -4.0
5 2 01/01/2019 200.0 -2.0
6 2 01/02/2019 100.0 -2.0
7 2 01/04/2019 100.0 NaN
8 2 01/05/2019 96.0 -4.0
вот мой код, но он не работает. Я думаю, что не мог понять, как это сделать, "если logi c in pandas, когда строка пуста, сделать что-нибудь".
for i, row in df.iterrows():
if(pd.isnull(row['transaction_total'] is True)):
if(pd.isnull(row['balance_total'] is True)):
df.loc[i,'transaction_total'] = df.loc[i-1,'transaction_total']
Может ли кто-нибудь просветить?