Метод cummin
Метод cummin применяется к DataFrame
и возвращает таблицу с кумулятивным минимумом
(нарастающим итогом по минимуму) для каждого столбца.
По умолчанию вычисления выполняются по столбцам, то есть
для каждой строки берется минимальное значение среди всех
предыдущих строк этого столбца. Параметр axis
позволяет изменить направление вычислений, а параметр
skipna управляет обработкой пропущенных значений.
Результат возвращается в виде нового DataFrame.
Синтаксис
df.cummin(axis=None, skipna=True)
Пример
Рассмотрим базовый пример вычисления кумулятивного минимума по столбцам на таблице с числами:
import pandas as pd
df = pd.DataFrame({
'a': [5, 3, 4, 2, 1],
'b': [10, 8, 9, 7, 6]
})
res = df.cummin()
print(res)
Результат выполнения кода:
a b
0 5 10
1 3 8
2 3 8
3 2 7
4 1 6
В столбце 'a' значения уменьшаются от 5 до 1, поэтому каждая следующая строка показывает все меньший минимум. В столбце 'b' минимум также постепенно уменьшается.
Пример
Теперь вычислим кумулятивный минимум по строкам.
Для этого передадим параметр axis=1:
import pandas as pd
df = pd.DataFrame({
'a': [5, 8, 1],
'b': [3, 6, 4],
'c': [7, 2, 9]
})
res = df.cummin(axis=1)
print(res)
Результат выполнения кода:
a b c
0 5 3 3
1 8 6 2
2 1 1 1
В первой строке минимум сначала равен 5, затем при переходе ко второму столбцу становится 3, и в третьем столбце остается 3. Во второй строке минимум последовательно равен 8, 6 и 2.
Пример
Рассмотрим обработку пропущенных значений.
По умолчанию параметр skipna=True,
поэтому пропуски игнорируются:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'a': [5, np.nan, 3, 2],
'b': [10, 8, np.nan, 6]
})
res = df.cummin()
print(res)
Результат выполнения кода:
a b
0 5.0 10.0
1 NaN 8.0
2 NaN NaN
3 2.0 NaN
В столбце 'a' пропуск во второй строке приводит
к пропуску в результате, так как нельзя вычислить
минимум с пропущенным значением. Однако если
установить skipna=False, то пропуски
будут распространяться:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'a': [5, np.nan, 3, 2],
'b': [10, 8, np.nan, 6]
})
res = df.cummin(skipna=False)
print(res)
Результат выполнения кода:
a b
0 5.0 10.0
1 NaN 8.0
2 NaN NaN
3 NaN NaN
Как видно, после появления первого пропуска во второй строке, во всех последующих строках результат также становится пропуском.
Пример
Метод cummin можно комбинировать с
условными операциями для поиска позиций,
в которых достигается минимум:
import pandas as pd
df = pd.DataFrame({
'a': [5, 3, 4, 2, 1],
'b': [10, 8, 9, 7, 6]
})
cummin_df = df.cummin()
is_min = cummin_df == df
print(is_min)
Результат выполнения кода:
a b
0 True True
1 True True
2 False False
3 True True
4 True True
Значения True указывают на позиции,
где текущее значение является новым минимумом.