#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. Спасибо, это оно