У меня есть массив фреймов данных [время] [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, надеюсь, он хорошо продуман :)






Такого же результата можно добиться с помощью:
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)