- Вы пытаетесь создать значение столбца на основе его предыдущего значения.
- Векторизованные операции вычисляют значения на основе существующих значений, а затем обновляют значения столбцов сразу, поэтому нет способа получить доступ к вновь созданному предыдущему значению.
- Для выполнения вычисления на основе предыдущего значения у вас должен быть доступ к предыдущему значению при выполнении вычисления для текущего значения
- Это можно сделать, присвоив каждое значение списку, а затем получив доступ к значению по предыдущему индексу
- Подробнее об использовании см.
pandas.DataFrame.iterrows
. - Следующая реализация работает, пока индекс фрейма данных
range(0, len(df)-1)
, уникальный упорядоченные целые числа, начинающиеся с 0. - Потому что
df
индекс i
используется для адреса new_col
import pandas as pd
data = {'Date': ['01-01-2020', '01-01-2020', '01-01-2020', '01-01-2020', '01-01-2020', '01-01-2020', '01-01-2020', '01-01-2020'],
'Multiple': [1, 1, 3, 1, 1, 1, 4, 1]}
# create dataframe
df = pd.DataFrame(data)
# function to perform multiplication
def create_new_column(dataframe: pd.DataFrame) -> list:
new_col = list()
for i, (d, m) in df.iterrows(): # i is the current index location; based on the shape of the example dataframe
if i == 0:
new_col.append(m * 1)
else:
new_col.append(m * new_col[i-1]) # [i-1] previous index location
return new_col
# call function and create new_col
df['new_col'] = create_new_column(df)
# display(df)
Date Multiple new_col
0 01-01-2020 1 1
1 01-01-2020 1 1
2 01-01-2020 3 3
3 01-01-2020 1 3
4 01-01-2020 1 3
5 01-01-2020 1 3
6 01-01-2020 4 12
7 01-01-2020 1 12