Метод sum аксессора expanding
Метод sum аксессора expanding применяется к DataFrame
или Series и вычисляет расширяющуюся сумму элементов.
При этом на каждой итерации сумма вычисляется по всем предыдущим
элементам, включая текущий. Метод позволяет указать ось
для вычислений, минимальное количество наблюдений, а также
настройки пропуска пропущенных значений.
Синтаксис
df.expanding().sum([min_periods, axis, numeric_only])
Пример
Давайте создадим Series и вычислим расширяющуюся сумму:
import pandas as pd
ser = pd.Series([1, 2, 3, 4, 5])
res = ser.expanding().sum()
print(res)
Результат выполнения кода:
0 1.0
1 3.0
2 6.0
3 10.0
4 15.0
dtype: float64
Пример
Теперь применим метод к DataFrame, чтобы увидеть
расширяющуюся сумму по каждому столбцу:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
res = df.expanding().sum()
print(res)
Результат выполнения кода:
a b
0 1.0 10.0
1 3.0 30.0
2 6.0 60.0
3 10.0 100.0
4 15.0 150.0
Пример с пропущенными значениями
Рассмотрим поведение метода при наличии пропусков.
По умолчанию NaN в данных приводит к NaN в результате:
import pandas as pd
ser = pd.Series([1, None, 3, 4, 5])
res = ser.expanding().sum()
print(res)
Результат выполнения кода:
0 1.0
1 NaN
2 NaN
3 NaN
4 NaN
dtype: float64
Пример с параметром min_periods
Параметр min_periods задаёт минимальное количество
наблюдений, необходимое для вычисления суммы. Если
наблюдений меньше, результат будет NaN:
import pandas as pd
ser = pd.Series([1, 2, 3, 4, 5])
res = ser.expanding(min_periods=3).sum()
print(res)
Результат выполнения кода:
0 NaN
1 NaN
2 6.0
3 10.0
4 15.0
dtype: float64
Пример с параметром axis
Параметр axis определяет направление вычислений.
По умолчанию вычисления идут по строкам (axis=0). Укажем axis=1,
чтобы вычислять сумму по столбцам:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3],
'b': [10, 20, 30],
'c': [100, 200, 300]
})
res = df.expanding(axis=1).sum()
print(res)
Результат выполнения кода:
a b c
0 1.0 11.0 111.0
1 2.0 22.0 222.0
2 3.0 33.0 333.0