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