Сместить значения в датафрйме по условию

Файл https://wdho.ru/e6oh

В датафрейме есть столбы min и max - они находят минимумы и максимумы в столбцах min_m и max_m. Но значения в min и max находятся на строках где условия было выполнено. Хочу сместить значения до строки с первым попавшимся "0" в столбцах min и max. Было:

введите сюда описание изображения

А нужно чтобы значение оказалось так:

введите сюда описание изображения

Тоесть вместо

введите сюда описание изображения получить: введите сюда описание изображения


Ответы (1 шт):

Автор решения: strawdog

Я вам предложу новое решение на вашем старом примере, где df был

      Date  for_max  for_min
0  1-Mar-00     0.00      0.0
1  2-Mar-00    29.47      0.0
2  3-Mar-00    29.28      0.0
3  6-Mar-00    29.69      0.0
4  7-Mar-00    31.95      0.0
... и т. д.

Теперь будет искать минимумы и максимумы и писать их в нужную позицию немного по-другому:

df["max"] = np.nan
for i, g in df[df["for_max"] != 0].groupby((df["for_max"] == 0).cumsum()):
    df.at[g.index[-1]+1, "max"] = g["for_max"].max()    

df["min"] = np.nan
for i, g in df[df["for_min"] != 0].groupby((df["for_min"] == 0).cumsum()):
    df.at[g.index[-1]+1, "min"] = g["for_min"].min()

df.fillna(0, inplace=True)  

Теперь ваш будет:

         Date  for_max  for_min    max    min
0     1-Mar-00     0.00     0.00   0.00   0.00
1     2-Mar-00    29.47     0.00   0.00   0.00
2     3-Mar-00    29.28     0.00   0.00   0.00
3     6-Mar-00    29.69     0.00   0.00   0.00
4     7-Mar-00    31.95     0.00   0.00   0.00
5     8-Mar-00     0.00     0.00  31.95   0.00
6     4-Dec-00     0.00     0.00   0.00   0.00
7     5-Dec-00     0.00     0.00   0.00   0.00
8     6-Dec-00     0.00     0.00   0.00   0.00
9     7-Dec-00     0.00    27.20   0.00   0.00
10    8-Dec-00     0.00    26.13   0.00   0.00
11   20-Dec-00     0.00    22.90   0.00   0.00
12   21-Dec-00     0.00    23.40   0.00   0.00
13   22-Dec-00     0.00    23.51   0.00   0.00
14   27-Dec-00     0.00    23.94   0.00   0.00
15   28-Dec-00     0.00    23.63   0.00   0.00
16   29-Dec-00     0.00     0.00   0.00  22.90
17    2-Jan-01     0.00     0.00   0.00   0.00
18   22-Feb-01     0.00     0.00   0.00   0.00
19   23-Feb-01     0.00     0.00   0.00   0.00
20   26-Feb-01     0.00     0.00   0.00   0.00
21    5-Nov-01     0.00    19.16   0.00   0.00
22    6-Nov-01     0.00    18.81   0.00   0.00
23    7-Nov-01     0.00     0.00   0.00  18.81
... и т.д.
→ Ссылка