Повторение строк и добавление значения из строки выше- Python

#python #loops

#python #циклы

Вопрос:

У меня есть столбец, который действует как регистр. Значения в каждой строке являются либо поступлением (положительным), либо исходящим (отрицательным). Я хочу создать дополнительный столбец, который принимает значение из строки выше и добавляет / вычитает текущее значение и дает общее введите описание изображения здесь

Ниже приведен код, который я пробовал, но все, что он делает, это записывает значения в другой столбец:

 mylist, df["consumption"]= []," " 
for i in range(1, len(thc)   1):
    j = df.columns.get_loc('Ledger')
    x = (df.iat[i - 1, j])
    mylist.append(x)
df["consumption"] = mylist
  

Я бы хотел, чтобы столбец потребления выглядел следующим образом:
введите описание изображения здесь

Цель состоит в том, чтобы использовать этот df для создания прогноза и линейного графика, отслеживающего потребление.

Спасибо за помощь

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

1. Взгляните на функцию pandas shift() . Это помогает при смещении строк.

Ответ №1:

Вы можете использовать df.cumsum()

 df["consumption"] = df['Ledger'].cumsum()
  

Ответ №2:

Давайте представим приведенные выше данные в виде 2d массива, где id представляют индекс 0, transaction представляют индекс 1, date представляют индекс 2 и ledger представляют значение индекса 3.

таким образом, у нас будет двухмерная структура массива, подобная

[ [идентификатор 1, транзакция1, дата 1, бухгалтерская книга1], [идентификатор 2, транзакция2, дата 2, бухгалтерская книга2], …. ]

Теперь мы хотим добавить новый столбец consumption к каждой строке, который будет суммой текущего legder и предыдущего ledger , и он будет представлять 4-е значение индекса для каждой строки.

 account =  [    [ 0 , "Beg bal2019-2020 ",  " 2019-09-05" , 16875],
                [ 1 , "3072 ",  " 2019-09-05" , -50],
                [ 2 , "30874 ",  " 2019-09-05" , -50],
                [ 3 , "247499 ",  " 2019-09-05" , -50],
           ]

current = 0
for row in account:
    row.append(current   row[3])
    current =row[4]

for i in account:
    print(i)
  

Вывод

 [0, 'Beg bal2019-2020 ', ' 2019-09-05', 16875, 16875]
[1, '3072 ', ' 2019-09-05', -50, 16825]
[2, '30874 ', ' 2019-09-05', -50, 16775]
[3, '247499 ', ' 2019-09-05', -50, 16725]