Я ищу способ вычисления с помощью Python Pandas: прокатка (*) мин серии без окна.
Давайте рассмотрим следующее Series
In [26]: s = pd.Series([10, 12, 14, 9, 10, 8, 16, 20])
Out[26]:
0 10
1 12
2 14
3 9
4 10
5 8
6 16
7 20
dtype: int64
Я бы хотел получить серию, подобную
0 10
1 10
2 10
3 9
4 9
5 8
6 8
7 8
dtype: int64
Я пытался
s.rolling().min()
но я получаю следующую ошибку
TypeError: rolling() missing 1 required positional argument: 'window'
Я сделал это
r = s.copy()
val_min = r.iloc[0]
for i, (idx, val) in enumerate(r.iteritems()):
if i > 0:
if val < val_min:
val_min = val
else:
r[idx] = val_min
и иметь правильный ответ
In [30]: r
Out[30]:
0 10
1 10
2 10
3 9
4 9
5 8
6 8
7 8
dtype: int64
но я думаю, что метод Панд, вероятно, должен существовать (и быть гораздо более эффективным) или, если он не существует, его, вероятно, следует реализовать.
(*) «переходящий» может быть не подходящим термином, может быть, он должен быть назван вместо «локальный» мин.
Редактировать: на самом деле он называется кумулятивным минимумом или расширяющимся минимумом