Найти минимум и максимумы из столбца df
Есть df (ссылка на файл)
df = pd.read_csv('23.csv')
df.columns = ['Date', 'for_max', 'for_min']
Хочу получить столбцы max/min в которых будут выделены максимумы и минимумы из небольших интервалов значений от 0 до 0 Например есть 0, 29,28,21,28,31,0 - интервал от 0 до 0. Здесь минимум 21 к примеру. Точно также для максимального.
Date for_max for_min
1-Mar-00 0 0
2-Mar-00 29.47 0
3-Mar-00 29.28 0
6-Mar-00 29.69 0
7-Mar-00 31.95 0
8-Mar-00 0 0
4-Dec-00 0 0
5-Dec-00 0 0
6-Dec-00 0 0
7-Dec-00 0 27.2
8-Dec-00 0 26.13
20-Dec-00 0 22.9
21-Dec-00 0 23.4
22-Dec-00 0 23.51
27-Dec-00 0 23.94
28-Dec-00 0 23.63
29-Dec-00 0 0
2-Jan-01 0 0
3-Jan-01 0 0
Итог
Date for_max for_min max min
1-Mar-00 0 0 0 0
2-Mar-00 29.47 0 0 0
3-Mar-00 29.28 0 0 0
6-Mar-00 29.69 0 0 0
7-Mar-00 31.95 0 31.95 0
8-Mar-00 0 0 0 0
5-Dec-00 0 0 0 0
6-Dec-00 0 0 0 0
7-Dec-00 0 27.2 0 0
8-Dec-00 0 26.13 0 0
20-Dec-00 0 22.9 0 22.9
21-Dec-00 0 23.4 0 0
22-Dec-00 0 23.51 0 0
27-Dec-00 0 23.94 0 0
28-Dec-00 0 23.63 0 0
29-Dec-00 0 0 0 0
2-Jan-01 0 0 0 0
3-Jan-01 0 0 0 0
Ответы (1 шт):
Автор решения: strawdog
→ Ссылка
Можно попробовать сделать так:
df = pd.read_csv("23.csv")
df.fillna(0, inplace=True) # - у вас в исходных данных есть NaN, от которых мы избавляемся
df["max"] = df["for_max"].iloc[df[df["for_max"] != 0].
groupby((df["for_max"] == 0).cumsum())["for_max"].idxmax()]
df["min"] = df["for_min"].iloc[df[df["for_min"] != 0].
groupby((df["for_min"] == 0).cumsum())["for_min"].idxmin()]
df.fillna(0, inplace=True)
Ну и в результате:
Date for_max for_min max min
0 1-Mar-00 0.00 0.0 0.00 0.0
1 2-Mar-00 29.47 0.0 0.00 0.0
2 3-Mar-00 29.28 0.0 0.00 0.0
3 6-Mar-00 29.69 0.0 0.00 0.0
4 7-Mar-00 31.95 0.0 31.95 0.0
5 8-Mar-00 0.00 0.0 0.00 0.0
6 4-Dec-00 0.00 0.0 0.00 0.0
7 5-Dec-00 0.00 0.0 0.00 0.0
8 6-Dec-00 0.00 0.0 0.00 0.0
9 7-Dec-00 0.00 27.2 0.00 0.0
...
100 15-Sep-06 0.0 62.21 0.0 0.00
101 18-Sep-06 0.0 63.00 0.0 0.00
102 19-Sep-06 0.0 61.87 0.0 0.00
103 20-Sep-06 0.0 60.30 0.0 0.00
104 21-Sep-06 0.0 60.34 0.0 0.00
105 22-Sep-06 0.0 60.11 0.0 0.00
106 25-Sep-06 0.0 59.32 0.0 59.32
107 26-Sep-06 0.0 59.70 0.0 0.00
108 27-Sep-06 0.0 0.00 0.0 0.00
109 28-Sep-06 0.0 0.00 0.0 0.00