Найдите точку, в которой значения в массиве начинают уменьшаться в Python

У меня есть массив фреймов данных [время] [Gforce] значений, которые представляют данные, собранные при движении маятника.

Выглядит это примерно так:

время TgF

0 0,993

1 0,988

2 0,982

3 0,983

......

36882 1,002

36883 1.000

На графике это выглядит примерно так:

https://i.imgur.com/nyvqBjx.png (Недостаточно репутации для публикации изображения?)

Значение Gforce остается практически неизменным в начале и в конце, когда оно начинает колебаться: становится больше до максимума, чем уменьшается до минимума (вроде).

Мне нужно выяснить, в какое время происходит «сдвиг», например:

время TgF

5,23 0,228

5,237 0,195

5.241 0,194

5,245 0,203

5,251 0,238

Я мог бы использовать цикл, и это было бы легко реализовать, например:

p1 = pandas.read_csv('Pendulo 1.csv', sep=',')
for i in range(1070, p1.TgF.size):
    if (p1.TgF[i] > p1.TgF[i+1] and p1.TgF[i+1] < p1.TgF[i+2]):
        print(p1.time[i+1])
        break

Но я считаю, что это будет слишком медленно для того количества данных, которое у меня есть (36884 точки данных). Есть ли лучший способ использовать волшебство Python?

Ps .: Это мой первый вопрос по StackOverflow, надеюсь, он хорошо продуман :)

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
190
1

Ответы 1

Такого же результата можно добиться с помощью:

p1["shift_f"] = p1["TgF"].shift(1).bfill()
p1["shift_b"] = p1["TgF"].shift(-1).ffill()

oscillating_ix = p1["TgF"] < p1[["shift_b", "shift_f"]].min(1)

p1.loc[oscillating_ix].drop(["shift_b", "shift_f"], axis=1)

Другие вопросы по теме