Как добавлять / вычитать значения строк друг из друга в pandas?

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть фрейм данных, который выглядит как:

     credit  debit
0   0.0     89.40
1   0.0     4.33
2   0.0     12.00
3   500.0   0.00
4   0.0     5.40
 

Если я знаю, что текущий баланс равен 300, как мне создать столбец баланса, который вычитает дебет из каждой строки и добавляет кредит из каждой строки?

Я пробовал использовать df.sub , но мне не повезло…

Столбец баланса должен выглядеть так:

 balance
300.00
389.40
393.33
405.33
-94.27
 

вот код для примера фрейма данных

 df = pd.DataFrame({'credit': {0: 0.0, 1: 0.0, 2: 0.0, 3: 500.0, 4: 0.0},'debit': {0: 89.4, 1: 4.33, 2: 12.0, 3: 0.0, 4: 5.4}})
 

Комментарии:

1. df['balance'] = 300 - df['debit'] df['credit']

2. Привет! Спасибо за усилия, но, пожалуйста, посмотрите на отредактированный пост, чтобы увидеть, как должен выглядеть столбец баланса. Я надеюсь, что это проясняет ситуацию

Ответ №1:

Вот так:

 In [511]: df['balance'] = df.debit.cumsum()   300 - df.credit.cumsum()

In [512]: df
Out[512]: 
   credit  debit  balance
0     0.0  89.40   389.40
1     0.0   4.33   393.73
2     0.0  12.00   405.73
3   500.0   0.00   -94.27
4     0.0   5.40   -88.87
 

или:

 In [513]: df['balance'] = df.debit.cumsum().sub(df.credit.cumsum()).add(300)
 

Комментарии:

1. Привет! Спасибо за усилия, но, пожалуйста, посмотрите на отредактированный пост, чтобы увидеть, как должен выглядеть столбец баланса. Я надеюсь, что это проясняет ситуацию

2. Какова логика создания этого balance столбца?

3. это похоже на банковскую выписку, кредит — это приток денежных средств, а дебет — отток. Я знаю текущий баланс учетной записи (300 долларов США), но я пытаюсь указать, какой исторический баланс был после каждой транзакции в фрейме данных

4. @zarkmuckerberg Пожалуйста, проверьте EDIT часть моего ответа. Дайте мне знать, если это то, что вы хотите?

Ответ №2:

Я думаю, что вы ищете «текущий баланс» фрейма данных. Если да, продолжайте читать else discard.

 import pandas as pd
from itertools import accumulate
import operator
import numpy as np

DF = pd.DataFrame({'credit': {0: 0.0, 1: 0.0, 2: 0.0, 3: 500.0, 4: 0.0},
 'debit': {0: 89.4, 1: 4.33, 2: 12.0, 3: 0.0, 4: 5.4}})

Initial_Balance = 300
Running_Balance = np.array(list(accumulate(DF.debit-DF.credit, func=operator.add))) Initial_Balance
DF["Running_Balance"] = Running_Balance
print(DF)
 

Это дает следующий результат.

    credit  debit  Running_Balance
0     0.0  89.40           389.40
1     0.0   4.33           393.73
2     0.0  12.00           405.73
3   500.0   0.00           -94.27
4     0.0   5.40           -88.87
 

Комментарии:

1. Спасибо, это оно