Как получить минимальные значения в квазипериодическом ряду? - PullRequest
2 голосов
/ 05 мая 2019

Для серии с

t = [0.1, 1, 2, 3, 0, 1, 2, 3, 4, 5, 0.9, 1, 2]
s = pd.Series(t)

Я хотел бы получить позиции n (и значения), где s.iloc[n] - это минимум, каждый раз, когда s возвращается от своего максимального значения к минимальному значению.

Итак, я хотел бы получить результат для этого примера:

position value
0        0.1
4        0
10       0.9

Я бы хотел иметь решение на основе панд, так как этот вопрос является просто входом для другой проблемы, которую я должен решить. В этом случае объем данных действительно велик.

Ответы [ 3 ]

5 голосов
/ 05 мая 2019

Если условие является просто проверкой предыдущего элемента:

t = [0.1, 1, 2, 3, 0, 1, 2, 3, 4, 5, 0.9, 1, 2]
s = pd.Series(t)

minimums = s[s<s.shift(1, fill_value=s[0]+1)]
>>> print(minimums)
0     0.1
4     0.0
10    0.9
dtype: float64
3 голосов
/ 05 мая 2019

Просто проверьте, какие строки имеют значение меньше, чем предыдущая строка:

s = s[(s.index == 0) | (s < s.shift(1))].reset_index()
s.columns = ['position', 'value']

Результирующий кадр данных:

  position  value
0        0    0.1
1        4    0.0
2       10    0.9

В случае, когда локальное минимальное значение не всегда следует непосредственно после локального максимума, условие может быть расширено до:

(s.index == 0) | ((s < s.shift(1)) &  (s < s.shift(-1)))
1 голос
/ 05 мая 2019

Может быть, что-то вроде этого:

t = [0.1, 1, 2, 3, 0, 1, 2, 3, 4, 5, 0.9, 1, 2]
s = pd.Series(t)
df=pd.DataFrame(s,columns=["original"])

Тогда используйте функцию различий панд:

df["diff"]=df["original"].diff()
    original    diff
0   0.1         NaN
1   1.0         0.9
2   2.0         1.0
3   3.0         1.0
4   0.0         -3.0
5   1.0         1.0
6   2.0         1.0
7   3.0         1.0
8   4.0         1.0
9   5.0         1.0
10  0.9        -4.1
11  1.0         0.1
12  2.0         1.0

И, наконец, просто отфильтруйте отрицательные значения в столбце diff:

df.loc[df["diff"]<0]

4     0.0
10    0.9
Name: original, dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...