python 3,6 pandas условное заполнение пропущенных значений - PullRequest
0 голосов
/ 24 февраля 2020

Если существует фрейм данных:

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']

Может ли кто-нибудь просветить?

1 Ответ

1 голос
/ 24 февраля 2020

IIU C, сначала создайте фиктивную серию с ffill, а затем используйте np.where:

s = df["balance_total"].ffill()

df["balance_total"] = np.where(df["balance_total"].isnull()&df["transaction_total"].notnull(),
                               s.add(df["transaction_total"]), s)

print (df)

   id        date  transaction_total  balance_total
0   1  01/01/2019               -1.0          102.0
1   1  01/02/2019               -2.0          100.0
2   1  01/03/2019                NaN          100.0
3   1  01/04/2019                NaN          100.0
4   1  01/05/2019               -4.0           96.0
5   2  01/01/2019               -2.0          200.0
6   2  01/02/2019               -2.0          100.0
7   2  01/04/2019                NaN          100.0
8   2  01/05/2019               -4.0           96.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...