Функция Python для расчета баланса для каждой строки, соответствующей отдельным транзакциям - PullRequest
0 голосов
/ 20 сентября 2019

Я работаю над банковской выпиской, соответствующей выходному фрейму данных и конечному балансу, соответствующему выходному ['balance'] [0]. Я хотел бы рассчитать все значения баланса для отдельных транзакций, как описано ниже.Это очень простой расчет, и все же он, похоже, не работает - есть что-то совершенно очевидное, что я пропускаю?Заранее спасибо!

    output['balance'] = ''
    output['balance'][0] = 21.15
    if len(output[amount]) > 0:
        return output[balance][i+1].append((output[balance][i]-output[amount][i+1]))
    else:
        output[balance].append((output[balance][0]))

output[['balance']] = output['Amount'].apply(lambda amount: bal_calc(output, amount))```

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2896             try:
-> 2897                 return self._engine.get_loc(key)
   2898             except KeyError:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 4.95

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
<ipython-input-271-b85947935fca> in <module>
----> 1 output[['balance']] = output['Amount'].apply(lambda amount: bal_calc(output, amount))

~\Anaconda3\lib\site-packages\pandas\core\series.py in apply(self, func, convert_dtype, args, **kwds)
   4040             else:
   4041                 values = self.astype(object).values
-> 4042                 mapped = lib.map_infer(values, f, convert=convert_dtype)
   4043 
   4044         if len(mapped) and isinstance(mapped[0], Series):

pandas/_libs/lib.pyx in pandas._libs.lib.map_infer()

<ipython-input-271-b85947935fca> in <lambda>(amount)
----> 1 output[['balance']] = output['Amount'].apply(lambda amount: bal_calc(output, amount))

<ipython-input-270-cbf5ac20716d> in bal_calc(output, amount)
      2     output['balance'] = ''
      3     output['balance'][0] = 21.15
----> 4     if len(output[amount]) > 0:
      5         return output[balance][i+1].append((output[balance][i]-output[amount][i+1]))
      6     else:

~\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
   2978             if self.columns.nlevels > 1:
   2979                 return self._getitem_multilevel(key)
-> 2980             indexer = self.columns.get_loc(key)
   2981             if is_integer(indexer):
   2982                 indexer = [indexer]

~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2897                 return self._engine.get_loc(key)
   2898             except KeyError:
-> 2899                 return self._engine.get_loc(self._maybe_cast_indexer(key))
   2900         indexer = self.get_indexer([key], method=method, tolerance=tolerance)
   2901         if indexer.ndim > 1 or indexer.size > 1:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 4.95

1 Ответ

0 голосов
/ 20 сентября 2019

Будет проще понять вашу проблему, вы можете опубликовать свой существующий и предполагаемый.Из вашего описания я думаю, что вы можете подойти к расчету баланса следующим образом

import pandas as pd

## creating dummy dataframe for testing
arr = np.random.choice(range(500,1000),(10,2))

debit_credit = np.random.choice([0,1], (10))

arr[:,0] = arr[:,0] * debit_credit
arr[:,1] = arr[:,1] * (1-debit_credit)
df=pd.DataFrame(arr, columns=["Debit", "Credit"])
display(df)


## calculating Balance
df["Balance"] = (df.Debit-df.Credit).cumsum()

display(df)

Выход


Debit   Credit  Balance
0   957 0   957
1   0   698 259
2   608 0   867
3   0   969 -102
4   0   766 -868
5   0   551 -1419
6   985 0   -434
7   861 0   427
8   927 0   1354
9   0   923 431
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...